Jump to content
  • 0

управление mousewheel


laliev
 Share

Question

$('.vertical_slide').on('mousewheel', function(event, delta){      pathname = window.location.hash;      if (delta> 0 ) {        window.location.hash = pathname +1;     }else {        window.location.hash = pathname +1;      }});         

есть такой код, который добавляет к текущему урлу + 1 по событию mousewheel(часть кода преобразования в число вырезана ) и вот проблема в том что если прокрутить очень сильно за раз то добавляться может и +4 сразу. как можно решить эту проблему подскажите пожалуйста, что бы пр любом уровне прокрутки добавлялся +1!

 

Спасибо за внимание!

Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0

deltaY может возвращать как -1 и 1, так и -2 и 2 и т.д.

 

Используйте Math.sign для работы с deltaY, которое для чисел возвращает -1 и 1. Вот на -1 и 1 проверяйте у себя в условии.

Edited by antonKar
Link to comment
Share on other sites

  • 0

проверяйте на знак, если у вас меньше 0, то делает -1, если больше, то +1. При этом думаю вам нужно будет проверять результат на равенство 0 и какого-то максимума

  if (delta> 0 ) {        window.location.hash = pathname +1;     }else {        window.location.hash = pathname +1;      }

я думал это и есть проверка :unsure:

Link to comment
Share on other sites

  • 0

Math.sign = Math.sign || function(x) {

x = +x; // преобразуем в число

if (x === 0 || isNaN(x)) {

return x;

}

return x > 0 ? 1 : -1;

}

$('.vertical_slide').on('mousewheel', function(event){

pathname = window.location.hash;

if (Math.sign(event.deltaY) == 1) {

window.location.hash = pathname + 1;

} else if (Math.sign(event.deltaY) == -1) {

window.location.hash = pathname + 1;

}

});

Link to comment
Share on other sites

  • 0

может я не в совокупности своей проблемы что то не правильно объяснил!  

 

может нагляднее лучше будет 

 

вот  посмотрите что происходит с урлом при быстром перелистывании с 1 по 5 слайд и обратно. а хочется что бы они всегда соответствовали нужной странице! 

Link to comment
Share on other sites

  • 0

дык у вас в корне не верный подход.

Крутанули мы колесико - начинается анимация и меняется хэш на 2

предположим курсор все еще находится над старым(уходящим) блоком и мы еще раз крутанем, у вас хэш сменится на 3, а стили применятся как будто у вас сейчас идет смена на вторую страничку

 

1. Вам бы сделать проверку скролла на боди или какой-то врапер общий для всех блоков/страниц

2. Сделать проверку хэша и исходя из него менять стили, а не отталкиваться от того над каким блоком был произведен скролл

Link to comment
Share on other sites

  • 0

дык у вас в корне не верный подход.

Крутанули мы колесико - начинается анимация и меняется хэш на 2

предположим курсор все еще находится над старым(уходящим) блоком и мы еще раз крутанем, у вас хэш сменится на 3, а стили применятся как будто у вас сейчас идет смена на вторую страничку

 

1. Вам бы сделать проверку скролла на боди или какой-то врапер общий для всех блоков/страниц

2. Сделать проверку хэша и исходя из него менять стили, а не отталкиваться от того над каким блоком был произведен скролл

а может есть какой то вариант типа запретить на время анимации все действия в том числе смену хэша ?

Link to comment
Share on other sites

  • 0

а вы посмотрите общий код в котором сделано N обработчиков вместо одного + дополнительные проверки

просто зачем городить заплатки на шаравары, если можно сделать штаны по размеру

Link to comment
Share on other sites

  • 0

я уже все варианты перепробовал и все равно коряво работает ну или руки кривые :( в общем у меня задача по текучему слайду определить сделать активный пункт меню. возможно  это можно сделать без привязки к урлу? какие варианты могут быть? уже совсем запутался :mellow:  :mellow:  :mellow:

Edited by laliev
Link to comment
Share on other sites

  • 0
возможно  это можно сделать без привязки к урлу?

Да, для этого переменные придумали.

	$('.link_slide1').on('click', function(event, delta){				$('.horizontal_slides').removeClass("left_transform_horizintal");				$('.horizontal_slides').removeClass("right_transform_horizintal");				 				$(".horizontal_slide1").addClass("");				$(".horizontal_slide2").addClass("");				$(".horizontal_slide3").addClass("");				$(".horizontal_slide4").addClass("");				$(".horizontal_slide5").addClass(""); 	 });	

жесть, да

Link to comment
Share on other sites

  • 0

 

возможно  это можно сделать без привязки к урлу?

Да, для этого переменные придумали.

	$('.link_slide1').on('click', function(event, delta){				$('.horizontal_slides').removeClass("left_transform_horizintal");				$('.horizontal_slides').removeClass("right_transform_horizintal");				 				$(".horizontal_slide1").addClass("");				$(".horizontal_slide2").addClass("");				$(".horizontal_slide3").addClass("");				$(".horizontal_slide4").addClass("");				$(".horizontal_slide5").addClass(""); 	 });	

жесть, да

 

согласен. всем спасибо за помощь !

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy