Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Выделенный якорь

Сообщения:  [1-10]   [11-12] 

 
 автор: Deed   (10.08.2013 в 22:45)   письмо автору
 
   для: aetern   (08.08.2013 в 21:56)
 

Вот, "накверил": http://jsbin.com/ezohic/1/edit

  Ответить  
 
 автор: aetern   (08.08.2013 в 21:56)   письмо автору
 
   для: confirm   (05.08.2013 в 23:40)
 

Спасибо огромное, все отлично работает.

  Ответить  
 
 автор: confirm   (05.08.2013 в 23:40)   письмо автору
 
   для: aetern   (05.08.2013 в 23:28)
 

В общем только через таймер, так как задействовать событие onscroll означает проблемы (не знаю что вам надо обрабатывать, но вот для примера в функции по ссылке - переход по якорю содержащемуся в url):
function setHash() {  
    target = location.hash.replace('#','');  
    if(e = document.getElementById(target)) e.className = 'mark'; 
    else target = null;
    setTimeout(function() {
        var h   =  (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight))/2,
            top = window.pageYOffset != undefined ? window.pageYOffset :
            function() {
               var doc =  document.documentElement || document.body,
                   off =  doc.scrollTop || doc && doc.scrollTop || 0;
               return off -= doc.clientTop;
            };
        window.scrollTo(0, top-h);
    }, 200);
}
Нужно только подобрать время срабатывания таймера (в примере это 200ms), если не будет срабатывать в некоторых браузерах, значит это время надо будет увеличить.

Метод scrollTo объекта window вместо ранее упоминаемого выбран исходя из кроссбраузерности (должен везде работать).

>при переходе на нее с других страниц сайта пользователи не видят то, что на самом верху...

То есть url все таки содержит hash? Если отмечать якорь, то почему не увидит? Собственно говоря это не обязательно и якорь может быть, если пользователь выбирает нечто на странице имеющее идентификатор, то уже на стороне сервера можно будет знать в какое место должен быть прокручен документ при получении его клиентом. А если недостаточно выделения, то можно сделать прокрутку с анимацией, при этом конечная позиция анимации не обязательно "на середину". Анимация сама по себе уже "подсказка", например, посмотрите в сети как делают плавную прокрутку документа к якорю, при этом якорь все такие вверху документа, это считайте "де юре" по умолчанию, к чему привыкли, изменять поведение привычного, это не всегда оправданно. При этом в качестве якоря лучше использовать атрибут id элемента, а не тег A (выше приведенный код именно на этом и строится).

  Ответить  
 
 автор: aetern   (05.08.2013 в 23:28)   письмо автору
 
   для: confirm   (05.08.2013 в 21:29)
 

Буду очень признателен. Делается это для прайса с листингом позиций каталога, где каждая позиция имеет свой якорь в теге <a> и при переходе на нее с других страниц сайта пользователи не видят то, что на самом верху, начинают все листать и путаются. Поэтому нужно это выделение в середине страницы.

  Ответить  
 
 автор: confirm   (05.08.2013 в 21:29)   письмо автору
 
   для: aetern   (05.08.2013 в 19:23)
 

Оказывается не так все и просто, получить по переходу по якорю положение документа. Надо подумать.

  Ответить  
 
 автор: aetern   (05.08.2013 в 19:23)   письмо автору
 
   для: confirm   (04.08.2013 в 19:01)
 

А как это на практике должно выглядеть.
Для меня clientHeight/2 мало что значит. Я так понимаю, что это JSкод. Прошу, подскажите как это реализовать человеку, не знающему JS.
Спасибо.

  Ответить  
 
 автор: confirm   (04.08.2013 в 19:01)   письмо автору
 
   для: aetern   (04.08.2013 в 17:50)
 

Понятно что имелось под "по умолчанию вверху". Браузер прокручивает (если требуется) содержимое якоря по верхнему краю клиентской области окна именно потому, чтобы обеспечить видимость всего или максимально возможное его содержимого. То есть, если прокручивать якорь на середину и при этом часть его содержимого будет скрыта, то полезность такой прокрутки сомнительна.

Но если это так необходимо, то учитывая, что браузер прокручивает якорь, остается после этого прокрутить документ (scrollTop) на текущее значение scrollTop минус высоту клиентской области окна деленной на два, то есть clientHeight/2. Естественно, что прокрутка именно на середину произойдет только в том случае, если это будет соответствовать условию.

  Ответить  
 
 автор: aetern   (04.08.2013 в 17:50)   письмо автору
 
   для: confirm   (04.08.2013 в 17:38)
 

Имеется в виду, чтобы после перехода теги <a name="as1"> или <div id="as1"> оказались у пользователя не вверху окна, а с отступом сверху (если, конечно, над ним есть какой-то контент). Т.е. с прокруткой его чуть ниже, до середины окна.

  Ответить  
 
 автор: confirm   (04.08.2013 в 17:38)   письмо автору
 
   для: aetern   (04.08.2013 в 17:32)
 

На какую середину?
Hash - это либо тег А //пример <a name="as1">
либо атрибут id любого тега на странице //например <div id="as1">
в положение которого и будет произведен переход (если потребуется, то и прокрутка документа) на странице. Естественно, если указанный якорь находится в середине документа, то в это место и произойдет переход.

  Ответить  
 
 автор: aetern   (04.08.2013 в 17:32)   письмо автору
 
   для: confirm   (04.08.2013 в 15:54)
 

я не это имел в виду, произошла замена символа: site.ru/page.html#05&#8243

должно было быть так: <a href = "site.ru/page.html#05">
а если с цифр нельзя то так: <a href = "site.ru/page.html#five" >

За ссылку спасибо. С выделением вроде все понятно, а как на середину переместить?

  Ответить  

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования