Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Перехват перехода по якорю (https://javascript.ru/forum/jquery/16328-perekhvat-perekhoda-po-yakoryu.html)

InviS 04.04.2011 09:40

Перехват перехода по якорю
 
Подскажите, пожалуйста, можно ли как-то перехватить переход по якорю? К примеру, если у меня есть ссылка:
index.php#part1, то по нажатию на ней мы сразу опустимся к id='part1'. Можно ли как-то перехватить и отменить переход по якорю или же сделать какие-то действия, а уже потом переходить к якорю на странице..?

walik 04.04.2011 10:09

<a href="#part1" onclick="myFunc();">Click</a>

Так будет выполнена функция myFunc и потом будет переход по якорю.

<a href="#part1" onclick="myFunc(); return false;">Click</a>

Так будет выполнена функция myFunc, а перехода по якорю не будет.

InviS 04.04.2011 14:16

Внутри страницы у меня и так все прекрасно работало... Я имел в виду перехват перехода по якорю на вновь загруженной странице. К примеру, если я перейду по ссылке:
index.php#part1 из документа help.php к примеру... т.е. я загрузил документ и браузер меня поставил на нужное место сразу же.. а я хочу сделать переход плавным.. как мне отменить стандартный браузеровский эффект перебрасывания?

Skipp 04.04.2011 14:34

я думаю вам придётся копать от события scroll.

Matre 04.04.2011 14:42

(function ($) {
	$.fn.preventJump = function (time) {
		return this.click(function (event) {
			$("body").animate({
				scrollTop : $("#" + this.href.split("#")[1]).offset().top
			}, time || 500);
			event.preventDefault();
		});
	};
})(jQuery);

$("a.test").preventJump(300);


<a href='#test' class='test'>
	Тест
</a>

...

<div id='test'>
	Сюда
</div>

Skipp 04.04.2011 14:47

Matre,
Это по моему не то, что просили:)
и это "#" + this.href.split("#")[1] , по моему можно переписать так: location.hash

InviS 04.04.2011 15:11

Matre,
Все это я уже реализовал.. меня интересует именно перехват при переходе на новую страницу. Возможно ли вообще перехватить это событие?!
Skipp,
Попробую поискать на англ. форумах относительнос scroll.. но сомневаюсь, что получится найти =) Хотя, может возможностями чистого js можно как-то отменить переход по якорю

Serg_pnz 04.04.2011 15:23

Я делал не скролл к якорю, а скролл к элементу с id
пример http://yphp.jcase.ru/#scrollto=newsz

Magneto 04.04.2011 19:19

А ларчик то просто открывается.

if (window.location.hash) {alert("Событие")}


Ссылка без я коря
Ссылка с якорем

InviS 05.04.2011 22:01

Serg_pnz,
У вас было что-то похожее на то, что мне нужно... Подмена hash? или как это вообще сделано? там мутулз и непонятно в каком файле искать ответ...
Magneto,
Ничего не понял... Вывести алерт по признаку хэша - не сложно. Как отменить действие браузера - перекидывание в эту точку - вот, что мне интересно....


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