Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Stop on lost focus

Status
Not open for further replies.

TheCandyman

Technical User
Sep 9, 2002
761
US
I have a jquery script that correctly rotates several images in a loop after showing each for a few seconds. I'm noticing in the newest Firefox and Chrome browsers, and found the same after searching, that it I move off the tab or minimize the browser that the JavaScript stops/pauses until focus is returned.

I see the wisdom in pausing JS when it's not being viewed to save wasted CPU and battery power so i need to tweak this script to only run on focus. It does work correctly in IE9. I have tried a few different things(ex. window.onblur = ) but can't get thing to work correctly so I'm in need of help. Here is my code:


Code:
$(document).ready(function() {

	//Set Default State of each portfolio piece
	$(".ImageRotaterPaging").show();
	$(".ImageRotaterPaging a:first").addClass("active");
		
	//Get size of images, how many there are, then determin the size of the image reel.
	var imageWidth = $(".ImageRotaterWindow").width();
	var imageSum = $(".ImageRotaterReel img").size();
	var imageReelWidth = imageWidth * imageSum;
	
	//Adjust the image reel to its new size
	$(".ImageRotaterReel").css({'width' : imageReelWidth});
	
	//Paging + Slider Function
	rotate = function(){	
		var triggerID = $active.attr("rel") - 1; //Get number of times to slide
		var image_reelPosition = triggerID * imageWidth; //Determines the distance the image reel needs to slide

		$(".ImageRotaterPaging a").removeClass('active'); //Remove all active class
		$active.addClass('active'); //Add active class (the $active is declared in the rotateSwitch function)
		
		//Slider Animation
		$(".ImageRotaterReel").animate({ 
			left: -image_reelPosition
		}, 500 );
		
	}; 
	
	//Rotation + Timing Event
	rotateSwitch = function(){		
		play = setInterval(function(){ //Set timer - this will repeat itself every 3 seconds
			$active = $('.ImageRotaterPaging a.active').next();
			if ( $active.length === 0) { //If paging reaches the end...
				$active = $('.ImageRotaterPaging a:first'); //go back to first
			}
			rotate(); //Trigger the paging and slider function
		}, 5000); //Timer speed in milliseconds (3 seconds)
	};
	
	rotateSwitch(); //Run function on launch
	
	//On Hover
	$(".ImageRotaterReel a").hover(function() {
		clearInterval(play); //Stop the rotation
	}, function() {
		rotateSwitch(); //Resume rotation
	});	
	
	//On Click
	$(".ImageRotaterPaging a").click(function() {	
		$active = $(this); //Activate the clicked paging
		//Reset Timer
		clearInterval(play); //Stop the rotation
		rotate(); //Trigger rotation immediately
		rotateSwitch(); // Resume rotation
		return false; //Prevent browser jump to link anchor
	});	
	
});
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top