Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как сделать ракрытие пунктов аккордеона по движению колесом внутри каждого пункта? (https://javascript.ru/forum/jquery/72938-kak-sdelat-rakrytie-punktov-akkordeona-po-dvizheniyu-kolesom-vnutri-kazhdogo-punkta.html)

VasyOK 08.03.2018 06:35

Как сделать ракрытие пунктов аккордеона по движению колесом внутри каждого пункта?
 
Приветствую специалистов по JS!
Хочу сделать аккордеон, в котором соседние табики раскрывались от того, что пользователь крутит колесо мыши вниз или вверх.

В jsfiddle (https://jsfiddle.net/PlayboyZP/xbmv63rr/) все выглядит хорошо, а на реальном сайте плохо: http://test.spamer35.myjino.ru/

Скрипт тут http://test.spamer35.myjino.ru/sites.../animations.js

Оно то работает, но если крутить мышкой быстро, то цепляет табик аккордеона, который еще "не приехал". Как это побороть? mousewheel поможет?

рони 08.03.2018 08:25

VasyOK,
Throttle-debounce

VasyOK 13.03.2018 09:07

Спасибо за наводку. Сделал так http://test.spamer35.myjino.ru/
Скрипт все еще тут: http://test.spamer35.myjino.ru/sites.../animations.js.
Вот он:
(function($){
  $(document).ready(function(){      

      $( ".region-harmonika" ).accordion({       
        header: ".block-title",
        animate: 1000,
        heightStyle: "fill"                     
      });

      $(".region-harmonika").accordion("refresh");

      $(window).resize(function() {      
        $(".region-harmonika").accordion("refresh");
      });         
      
      var scroll_place = $(".region-harmonika .block-content").toArray();    
      

      $.each( scroll_place, function( i, value ) {
        
        var funk = function(e){
          if(e.originalEvent.deltaY < 0 && $( this ).scrollTop() == 0 ) {
              
            $(".region-harmonika").accordion({ active: i-1 });            
            console.log('Moove up');
          
          } 
          
          if(e.originalEvent.deltaY >= 0 && $( this ).height() + $( this ).scrollTop() >= this.scrollHeight) 
          {                          
            
            $(".region-harmonika").accordion({ active: i+1 });            
            console.log('Moove down');
          
          }                    
           
        }

        $(value).on('wheel', $.debounce(1000, true, funk));            
        
      });        
    
  }); 
   
})(jQuery);


Как-то калично это работает. Можно это как-то "плавнее" сделать, как считаете?

рони 13.03.2018 09:20

VasyOK,
как то ненормально стало работать, может не использовать accordion, а сделать обычным animate?

VasyOK 13.03.2018 11:46

Быть может. Дайте наводку как. Можно без подробных инструкций.


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