(function($) { "use strict"; /** * * RoyalSlider auto play module * @version 1.0.5: * * 1.0.3: * - added support for 'autoplay' property name. * * 1.0.4 * - added toggleAutoPlay public method * * 1.0.5 * - Fixed issue when autoPlay may not pause when switching browser tabs */ $.extend($.rsProto, { _initAutoplay: function() { var self = this, del; self._autoPlayDefaults = { enabled: false, stopAtAction: true, pauseOnHover: true, delay: 2000 }; // fix deprecated name if(!self.st.autoPlay && self.st.autoplay) { self.st.autoPlay = self.st.autoplay; } self.st.autoPlay = $.extend({}, self._autoPlayDefaults, self.st.autoPlay); if(self.st.autoPlay.enabled) { self.ev.on('rsBeforeParseNode', function(e, content, obj) { content = $(content); del = content.attr('data-rsDelay'); if(del) { obj.customDelay = parseInt(del, 10); } }); self.ev.one('rsAfterInit', function() { self._setupAutoPlay(); }); self.ev.on('rsBeforeDestroy', function() { self.stopAutoPlay(); self.slider.off('mouseenter mouseleave'); $(window).off('blur'+self.ns + ' focus' + self.ns); }); } }, _setupAutoPlay: function() { var self = this; self.startAutoPlay(); self.ev.on('rsAfterContentSet', function(e, slideObject) { if(!self._isDragging && !self._isAnimating && self._autoPlayEnabled && slideObject === self.currSlide ) { self._play(); } }); self.ev.on('rsDragRelease', function() { if(self._autoPlayEnabled && self._autoPlayPaused) { self._autoPlayPaused = false; self._play(); } }); self.ev.on('rsAfterSlideChange', function() { if(self._autoPlayEnabled) { if(self._autoPlayPaused) { self._autoPlayPaused = false; if(self.currSlide.isLoaded) { self._play(); } } } }); self.ev.on('rsDragStart', function() { if(self._autoPlayEnabled) { if(self.st.autoPlay.stopAtAction) { self.stopAutoPlay(); } else { self._autoPlayPaused = true; self._pause(); } } }); self.ev.on('rsBeforeMove', function(e, type, userAction) { if(self._autoPlayEnabled) { if(userAction && self.st.autoPlay.stopAtAction) { self.stopAutoPlay(); } else { self._autoPlayPaused = true; self._pause(); } } }); self._pausedByVideo = false; self.ev.on('rsVideoStop', function() { if(self._autoPlayEnabled) { self._pausedByVideo = false; self._play(); } }); self.ev.on('rsVideoPlay', function() { if(self._autoPlayEnabled) { self._autoPlayPaused = false; self._pause(); self._pausedByVideo = true; } }); $(window).on('blur'+self.ns, function(){ if(self._autoPlayEnabled) { self._autoPlayPaused = true; self._pause(); } }).on('focus'+self.ns, function(){ if(self._autoPlayEnabled && self._autoPlayPaused) { self._autoPlayPaused = false; self._play(); } }); if(self.st.autoPlay.pauseOnHover) { self._pausedByHover = false; self.slider.hover( function() { if(self._autoPlayEnabled) { self._autoPlayPaused = false; self._pause(); self._pausedByHover = true; } }, function() { if(self._autoPlayEnabled) { self._pausedByHover = false; self._play(); } } ); } }, toggleAutoPlay: function() { var self = this; if(self._autoPlayEnabled) { self.stopAutoPlay(); } else { self.startAutoPlay(); } }, startAutoPlay: function() { var self = this; self._autoPlayEnabled = true; if(self.currSlide.isLoaded) { self._play(); } }, stopAutoPlay: function() { var self = this; self._pausedByVideo = self._pausedByHover = self._autoPlayPaused = self._autoPlayEnabled = false; self._pause(); }, _play: function() { var self = this; if(!self._pausedByHover && !self._pausedByVideo) { self._autoPlayRunning = true; if(self._autoPlayTimeout) { clearTimeout(self._autoPlayTimeout); } self._autoPlayTimeout = setTimeout(function() { var changed; if(!self._loop && !self.st.loopRewind) { changed = true; self.st.loopRewind = true; } self.next(true); if(changed) { changed = false; self.st.loopRewind = false; } }, !self.currSlide.customDelay ? self.st.autoPlay.delay : self.currSlide.customDelay); } }, _pause: function() { var self = this; if(!self._pausedByHover && !self._pausedByVideo) { self._autoPlayRunning = false; if(self._autoPlayTimeout) { clearTimeout(self._autoPlayTimeout); self._autoPlayTimeout = null; } } } }); $.rsModules.autoplay = $.rsProto._initAutoplay; })(jQuery);