2015-04-22 3 views
1

Я сделал слайдер, но я не так уж хорош с jQuery. Я хотел бы приостановить слайдер на hover, а также хотел бы предотвратить использование кнопок при анимации. Может ли кто-нибудь помочь мне в этом?jQuery slider help

var jq = $.noConflict(); 

setInterval(function() { 
     var leftPos = jq('#browser').scrollLeft(); 
     if(leftPos == 5400){ 
     jq('#browser').animate({scrollLeft: 0}, 800); 
     }else{ 
     jq('#browser').animate({scrollLeft: leftPos + 900}, 800);  
     } 
}, 3000); 

     jq('.rightarrow').click(function() { 
     var leftPos = jq('#browser').scrollLeft(); 
     if(leftPos == 5400){ 
     jq('#browser').animate({scrollLeft: 0}, 800); 
     }else{ 
     jq('#browser').animate({scrollLeft: leftPos + 900}, 800);  
     } 
    }); 

     jq('.leftarrow').click(function() { 
     var leftPos = jq('#browser').scrollLeft(); 
     if(leftPos == 0){ 
     jq('#browser').animate({scrollLeft: 5400}, 800); 
     }else{ 
     jq('#browser').animate({scrollLeft: leftPos - 900}, 800); 
    } 
    }); 

Это моя скрипка:

https://jsfiddle.net/apielotje/2kyaJ/958/

ответ

0

Обновлено: исправлена ​​ошибка на стрелах.

Demo

Является ли это то, что вы хотите? Я просто спрятал кнопки при воспроизведении анимации, и когда обнаружен зависание, они снова отображаются. Если вы хотите, чтобы кнопки можно было просто отключить, а не скрывать.

var jq = $.noConflict(); 

var siId = -1, 
    si = function() { 
     //hidding buttons 
     siId = setInterval(function() { 
      var leftPos = jq('#browser').scrollLeft(); 
      if (leftPos == 5400) { 
       jq('#browser').animate({ 
        scrollLeft: 0 
       }, 800); 
      } else { 
       jq('#browser').animate({ 
        scrollLeft: leftPos + 900 
       }, 800); 
      } 
     }, 3000); 
    } 

//hidding arrows initially 
jq('.rightarrow, .leftarrow').hide(); 

jq('#scrolldiv_container').mouseenter(function(){ 
    jq('.rightarrow, .leftarrow').show('fast'); 
    clearInterval(siId); 
}) 
jq('#scrolldiv_container').mouseleave(function(){ 
    jq('.rightarrow, .leftarrow').hide('fast'); 
     si(); 
}); 

jq('.rightarrow').click(function() { 
    var leftPos = jq('#browser').scrollLeft(); 
    if (leftPos == 5400) { 
     jq('#browser').animate({ 
      scrollLeft: 0 
     }, 800); 
    } else { 
     jq('#browser').animate({ 
      scrollLeft: leftPos + 900 
     }, 800); 
    } 
}); 

jq('.leftarrow').click(function() { 
    var leftPos = jq('#browser').scrollLeft(); 
    if (leftPos == 0) { 
     jq('#browser').animate({ 
      scrollLeft: 5400 
     }, 800); 
    } else { 
     jq('#browser').animate({ 
      scrollLeft: leftPos - 900 
     }, 800); 
    } 
}); 

//starting slider here 
si(); 
+1

Ничего себе, это было супер быстро! Большое спасибо, отлично работает! – apielotje

+0

@ user3733479 Я заметил ошибку. Вы не можете получить доступ к стрелкам с помощью моего сценария. Вот обновление: https://jsfiddle.net/Grimbode/r5norvwu/ – rottenoats

0

Добавить булево, чтобы увидеть, если пользователь парит #scrolldiv_container элемент.

var isHovering = false; 
setInterval(function() { 
    if(!isHovering) { 
     var leftPos = jq('#browser').scrollLeft(); 
     if(leftPos == 5400){ 
      jq('#browser').animate({scrollLeft: 0}, 800); 
     } else{ 
      jq('#browser').animate({scrollLeft: leftPos + 900}, 800);  
     } 
    } 
}, 3000); 

Добавить события для MouseEnter и MouseLeave O в #scrolldiv_container элемента. Таким образом, он не будет прокручиваться, когда вы наводите левую и правую кнопки. Это не то, о чем вы просили, но я был бы доволен конечным результатом.

jq("#scrolldiv_container").mouseenter(function() { 
    isHovering = true; 
    }).mouseleave(function() { 
    isHovering = false; 
}); 

Читайте о событиях здесь: https://api.jquery.com/mouseover/

Fiddle https://jsfiddle.net/j5sqjfvk/

0

Просто создайте функцию и управляйте своими интервалами при наведении указателя мыши. Это приостановит слайдер при наведении указателя мыши. И вы также можете управлять выцветанием кнопок в разделе наведения.

var jq = $.noConflict(); 
    function test() { //name your function 
     var leftPos = jq('#browser').scrollLeft(); 
     if(leftPos == 5400){ 
     jq('#browser').animate({scrollLeft: 0}, 800); 
     }else{ 
     jq('#browser').animate({scrollLeft: leftPos + 900}, 800);  
     } 
    } 

    var interval = setInterval(test, 3000); //set default interval 

     jq('.rightarrow').click(function() { 
     var leftPos = jq('#browser').scrollLeft(); 
     if(leftPos == 5400){ 
     jq('#browser').animate({scrollLeft: 0}, 800); 
     }else{ 
     jq('#browser').animate({scrollLeft: leftPos + 900}, 800);  
     } 
    }); 

     jq('.leftarrow').click(function() { 
     var leftPos = jq('#browser').scrollLeft(); 
     if(leftPos == 0){ 
     jq('#browser').animate({scrollLeft: 5400}, 800); 
     }else{ 
     jq('#browser').animate({scrollLeft: leftPos - 900}, 800); 
    } 
    }); 
    jq('#scrolldiv_container').hover(function(){ 
    clearInterval(interval); //destroy interval on hover 
    },   
    function(){ 
    interval = setInterval(test, 3000); // create default interval on hover out 
    }); 
+0

Спасибо большое! Прекрасно работает! – apielotje

+0

Ваше приветствие ... –