2017-07-06 204 views
0

我環顧四周,但沒有找到任何東西,請參閱下面的代碼。暫停jQuery懸停(鼠標懸停)

考慮到這一點,我只需要能夠在鼠標懸停時暫停動畫。

感謝您的幫助!

(function ($) { 
 
\t $.fn.textSlider = function (options) { 
 

 
\t \t /* Default settings */ 
 
\t \t var settings = $.extend(
 
\t \t \t { 
 
\t \t \t \t timeout: 2000, 
 
\t \t \t \t slideTime: 750, 
 
\t \t \t }, 
 
\t \t \t options 
 
\t \t); 
 

 
\t \t var nextItem; 
 

 
\t \t var currentItem = 0; 
 
\t \t var count = 0; 
 

 
\t \t this.children('.slider-item').each(
 
\t \t \t function() 
 
\t \t \t { 
 
\t \t \t \t $(this).addClass('slide-' + (count)) 
 
\t \t \t \t \t .css(
 
\t \t \t \t \t \t { 
 
\t \t \t \t \t \t \t //opacity: \t 0, 
 
\t \t \t \t \t \t \t //paddingTop: \t '100px', 
 
\t \t \t \t \t \t \t //paddingBottom: '0px' 
 
\t \t \t \t \t \t } 
 
\t \t \t \t \t); 
 
\t \t \t \t $(this).hide(); 
 
\t \t \t \t count++; 
 
\t \t \t } 
 
\t \t); 
 

 
\t \t function firstSlide() 
 
\t \t { 
 
\t \t \t $('.slide-' + currentItem).show().animate({ 
 
\t \t \t \t //paddingTop: '0px', paddingBottom: '50px', 
 
\t \t \t \t opacity: 1 }, settings.slideTime); 
 

 
\t \t \t setTimeout (transition, settings.timeout); 
 
\t \t } 
 

 
\t \t function transition() 
 
\t \t { 
 
\t \t \t nextItem = parseInt (currentItem + 1); 
 

 
\t \t \t if (nextItem >= count) 
 
\t \t \t \t nextItem = 0; 
 

 
\t \t \t $('.slide-' + currentItem).animate({ 
 
\t \t \t \t //paddingTop: '100px', paddingBottom: '0px', 
 
\t \t \t \t opacity: 0 }, settings.slideTime, function() { 
 
\t \t \t \t \t $(this).hide(); 
 
\t \t \t \t \t $('.slide-' + nextItem).show().animate({ 
 
\t \t \t \t \t \t //paddingTop: '0px', paddingBottom: '50px', 
 
\t \t \t \t \t \t opacity: 1 }, settings.slideTime); 
 
\t \t \t }); 
 

 
\t \t \t currentItem = nextItem; 
 
\t \t \t setTimeout (transition, settings.timeout); 
 
\t \t } 
 
\t \t return firstSlide(); 
 
\t }; 
 
}(jQuery)); 
 

 
// Start the Text Slider 
 
\t $('.slide').textSlider({ 
 
\t \t timeout: 5000, 
 
\t \t slideTime: 650, 
 
\t \t loop: 1 
 
\t });
/* Main Message & Text */ 
 
.main-message { 
 
\t font-size: 150%; 
 
\t font-weight: bold; 
 
\t padding-bottom: 20px; 
 
\t margin-left: 20px; 
 
} 
 
.main-text { 
 
\t font-size: 110%; 
 
\t margin-left: 20px; 
 
}
<!-- Start Text Slider --> 
 
\t \t <div class="slide"> 
 
\t \t \t <div class="slider-item"> 
 
\t \t \t \t <div class="main-message">Test 1</div> 
 
\t \t \t \t <div class="main-text">Sub text here 1</div> 
 
\t \t \t </div> 
 
\t \t \t <div class="slider-item"> 
 
\t \t \t \t <div class="main-message">Test 2</div> 
 
\t \t \t \t <div class="main-text">Sub text here 2</div> 
 
\t \t \t </div> 
 
\t \t \t <div class="slider-item"> 
 
\t \t \t \t <div class="main-message">Test 3</div> 
 
\t \t \t \t <div class="main-text">Sub text here 3</div> 
 
\t \t \t </div> 
 
\t \t </div> 
 
\t \t <!-- End Text Slider --> 
 
    
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

回答

2

在你功能轉換(){...你可以在開頭添加:

// if mouse is hover element call again the settimeout... 
if ($('.slide-' + currentItem + ':hover').length != 0) { 
    setTimeout(transition, settings.timeout); 
    return; 
} 

不同的溶膠ution可以基於.hover(),添加以下事件處理程序:

this.children('.slider-item').hover(
     function (e) { 
      $(this).addClass('hover'); 
     }, 
     function (e) { 
      $(this).removeClass('hover'); 
     } 
); 

和,因此,與改變第一建議的代碼:

// if element has hover class call again the settimeout... 
if ($('.slide-' + currentItem + '.hover').length != 0) { 
    setTimeout(transition, settings.timeout); 
    return; 
} 

的片段:

(function ($) { 
 
    $.fn.textSlider = function (options) { 
 

 
     /* Default settings */ 
 
     var settings = $.extend(
 
       { 
 
        timeout: 2000, 
 
        slideTime: 750, 
 
       }, 
 
       options 
 
     ); 
 

 
     var nextItem; 
 

 
     var currentItem = 0; 
 
     var count = 0; 
 

 
     this.children('.slider-item').each(function() { 
 
        $(this).addClass('slide-' + (count)) 
 
          .css({ 
 
           //opacity: \t 0, 
 
           //paddingTop: \t '100px', 
 
           //paddingBottom: '0px' 
 
          } 
 
        ); 
 
        $(this).hide(); 
 
        count++; 
 
       } 
 
     ); 
 
     
 
     this.children('.slider-item').hover(
 
       function (e) { 
 
        $(this).addClass('hover'); 
 
       }, 
 
       function (e) { 
 
        $(this).removeClass('hover'); 
 
       } 
 
     ); 
 

 

 
     function firstSlide() { 
 
      $('.slide-' + currentItem).show().animate({ 
 
       //paddingTop: '0px', paddingBottom: '50px', 
 
       opacity: 1 
 
      }, settings.slideTime); 
 

 
      setTimeout(transition, settings.timeout); 
 
     } 
 

 
     function transition() { 
 
      if ($('.slide-' + currentItem + '.hover').length != 0) { 
 
       setTimeout(transition, settings.timeout); 
 
       return; 
 
      } 
 
      nextItem = parseInt(currentItem + 1); 
 

 
      if (nextItem >= count) 
 
       nextItem = 0; 
 

 
      $('.slide-' + currentItem).animate({ 
 
       //paddingTop: '100px', paddingBottom: '0px', 
 
       opacity: 0 
 
      }, settings.slideTime, function() { 
 
       $(this).hide(); 
 
       $('.slide-' + nextItem).show().animate({ 
 
        //paddingTop: '0px', paddingBottom: '50px', 
 
        opacity: 1 
 
       }, settings.slideTime); 
 
      }); 
 

 
      currentItem = nextItem; 
 
      setTimeout(transition, settings.timeout); 
 
     } 
 

 
     return firstSlide(); 
 
    }; 
 
}(jQuery)); 
 

 

 
// Start the Text Slider 
 
$('.slide').textSlider({ 
 
    timeout: 1000, 
 
    slideTime: 350, 
 
    loop: 1 
 
});
.main-message { 
 
    font-size: 150%; 
 
    font-weight: bold; 
 
    padding-bottom: 20px; 
 
    margin-left: 20px; 
 
} 
 

 
.main-text { 
 
    font-size: 110%; 
 
    margin-left: 20px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 

 

 
<div class="slide"> 
 
    <div class="slider-item"> 
 
     <div class="main-message">Test 1</div> 
 
     <div class="main-text">Sub text here 1</div> 
 
    </div> 
 
    <div class="slider-item"> 
 
     <div class="main-message">Test 2</div> 
 
     <div class="main-text">Sub text here 2</div> 
 
    </div> 
 
    <div class="slider-item"> 
 
     <div class="main-message">Test 3</div> 
 
     <div class="main-text">Sub text here 3</div> 
 
    </div> 
 
</div>

+1

謝謝,這工作!我最想添加的最後一件事是在文本底部的子彈導航,以便從一個文本滾動到另一個文本。但是否則這是非常好的:D –

+0

@LuisM非常感謝。對於子彈你需要做出更多的變化:自動播放:開/關,步驟... – gaetanoM

+0

@LuisM對於子彈,你可以採取lokk [純CSS滑塊 - 自動播放,kenburns,prev/next,子彈 - 沒有js !](https://codepen.io/hw/pen/biEBz) – gaetanoM

0

默認情況下,jQuery的不支持暫停動畫,但是,像往常一樣,有一個爲一個插件:http://tobia.github.io/Pause/

+0

你可以懸停克隆'$('。slide-'+ cur rentItem)'元素,隱藏滑塊並將克隆的元素附加到滑塊容器,然後在鼠標移出時移除克隆元素並再次使滑塊可見...還跟蹤'currentItem',以便可以將相同的值分配給滑塊並使其看起來連續... –

+1

即使元素被隱藏,原始動畫也會繼續運行,因此當您再次顯示該元素時,會出現不透明的突然跳躍。你可能能夠解決這個問題,但在我看來,代碼很快會變得非常複雜。 –