Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   прогкрутка к якорям (https://javascript.ru/forum/misc/40931-progkrutka-k-yakoryam.html)

рони 26.08.2013 19:08

cOAPerator,
это $('a[href^="#"]') выборка ссылок начинающихся на # ----на такую http://sait.ru/category/statia.htnl#pod-razdel1 он не среагирует -- лучше конечно видет код над которым вы мучаитесь
^ начало
* содержит



$('a[href*="#"]').click(function(){
	// добавляем обрезку
    var target = $(this).attr('href').replace(/^[^#]+/,'');
	$('html, body').animate({scrollTop: target ==  '#top' ? 0 :$(target).offset().top}, 800);
	return false;
});

cOAPerator 26.08.2013 20:19

рони, над вот этим кодом и мучаюсь )
вот это было
$(function(){
	$("#back-top").hide();
	$(function () {
		$(window).scroll(function () {
			if ($(this).scrollTop() > 150) {
				$('#back-top').fadeIn();
			} else {
				$('#back-top').fadeOut();
			}
		});
		$('#back-top a').click(function () {
			$('body,html').animate({scrollTop: 0}, 800);
				return false;
		});
	});
});

вот это стало
$(function(){
	$("#back-top").hide();
	$(window).scroll(function () {
		if ($(this).scrollTop() > 150) {
			$('#back-top').fadeIn();
		} else {
			$('#back-top').fadeOut();
		}
	});
	$('a[href*="#"]').click(function(){
		// добавляем обрезку
		var target = $(this).attr('href').replace(/^[^#]+/,'');
		$('html, body').animate({scrollTop: target ==  '#top' ? 0 :$(target).offset().top}, 800);
		return false;
	});
});

но ссылки другие не работают почему то (кроме кнопки наверх, она работает), а в тестовом скрипте работают, хотя в тестовом скрипте и в рабочем они одинаковые.
я похоже догадываюсь в чем проблема, в тестовом скрипте якоря <a id="center">center</a>
а у меня в рабочем скрипте <a name="center">center</a> как положено по спецификации
потому и не работают ссылки простые.
как изменить скрипт чтобы с нормальными якорями работал скрипт?
использовать id нет возможности, так как якоря делаются редактором

рони 26.08.2013 20:57

cOAPerator,
про спецификации ...
В XHTML и HTML5 вместо name для определения якоря требуется указывать атрибут id.

а селектор изменить не судьба ?
$('a[href*="#"]').click(function(){
	// добавляем обрезку
    var target = $(this).attr('href').replace(/^[^#]+#/,'');
	$('html, body').animate({scrollTop: target ==  'top' ? 0 :$("[name='" + target + "']").offset().top}, 800);
	return false;
});


для медитации Селекторы jquery

cOAPerator 26.08.2013 21:37

Цитата:

Сообщение от рони (Сообщение 269439)
cOAPerator,
про спецификации ...
В XHTML и HTML5 вместо name для определения якоря требуется указывать атрибут id.

а селектор изменить не судьба ?
$('a[href*="#"]').click(function(){
	// добавляем обрезку
    var target = $(this).attr('href').replace(/^[^#]+#/,'');
	$('html, body').animate({scrollTop: target ==  'top' ? 0 :$("[name='" + target + "']").offset().top}, 800);
	return false;
});


для медитации Селекторы jquery

теперь работают ссылки в документе, но не работает кнопка наверх

В XHTML и HTML5 вместо name для определения якоря требуется указывать атрибут id.
у меня html 4.01

рони 26.08.2013 21:46

cOAPerator,
а самому подумать? как у вас кнопки вверх href выглядит?

cOAPerator 26.08.2013 23:14

рони, все я понял свою ошибку. исправил и все заработало

еще 1 последний вопрос, как отступ сделать от верха после прокрутки к якорю?
а то у меня вверху прикрепленное меню высотой 50px
и после перехода к якорю скрывается под менюшкой. я думал в css задать отступ, но это не вариант.
если правильно думаю то вот в этой строке
$('html, body').animate({scrollTop: target ==  'top' ? 0 :$("[name='" + target + "']").offset().top}, 800);

0 надо поменять на 100 - получится отступ в 100 px.

рони 26.08.2013 23:29

cOAPerator,
да 0 на 100 :cray: это для прокрутки кверху --- если к якорям $("[name='" + target + "']").offset().top + 100 и пробуйте прежде чем спросить. и читайте доку прежде чем что-то делать.

cOAPerator 26.08.2013 23:34

рони, великодушное спасибо! за помощь и терпение! побольше бы таких людей как Вы!
Благодяря Вам я теперь понял как писать подобные скрипты.

cOAPerator 27.08.2013 00:48

рони, тут тобнаружился косяк один, неправильно прощитывается отступ:
посмотреть рабочий вариант можно тут
_http://starnox.ru/articles/php/upload-failov-i-vse-s-etim-svyazannoe.html


в опере и лисе все нормально прокручивает, соответственно просчет отступа нормально происходит,
проблема в хроме и webkit подобных.

Добавление: проблему решил сам, спасибо.

рони 27.08.2013 02:49

Цитата:

Сообщение от cOAPerator
неправильно прощитывается отступ

что значит неправильно? догадаться?

две картинки -- правильно и неправильно и ещё стрелками указать - но возможно вам поможет
css
strong{
  display:  inline-block;
}


Часовой пояс GMT +3, время: 04:18.