www.gusucode.com > SiteEngine(建站引擎) 7.0 个人免费版源码程序 > data/js/jquery/ImgSlider.js

    function Slider(container)
{
	//* Member variables
	var _container = document.getElementById(container);
	var _sliders = GetElementsByClass(_container,'div','slide');
	var _width = 0;
	var _instance = this;
	var _activeSlide = null;
	var _activeWidth = 0;

	//* Settings
	var _overlap = 10;
	var _stepSize = 5;


	//* Static methods
	function GetElementsByClass(object, tag, className) 
	{
		var elements = object.getElementsByTagName(tag);
		var result = new Array();
		for (var i = 0; i < elements.length; i++) 
		{
			if (elements[i].className == className) result.push(elements[i]);
		}
		return result;
	}

	function GetElementByClass(object, tag, className) 
	{
		var elements = object.getElementsByTagName(tag);
		for (var i = 0; i < elements.length; i++) 
		{
			if (elements[i].className == className) return elements[i];
		}
		return null;
	}

	function AttachEvent(object,evt,fnc,useCapture)
	{
		if (!useCapture) useCapture=false;
		
		if (object.addEventListener)
		{
			object.addEventListener(evt,fnc,useCapture);
			return true;
		} 
		else
		{
			return object.attachEvent("on" + evt,fnc);
		}
	}

	//* Methods	
	this.Init = function()
	{
		_width = _container.clientWidth /_sliders.length;
		AttachEvent(_container,'mouseout',this.ContainerMouseOut,true);
		for(var i = 0;i < _sliders.length; i++)
		{
			var mouseOverFunction = (function(element){return function() { _instance.SlideMouseOver(element); }})(_sliders[i]); //* ie hax
			AttachEvent(_sliders[i],'mouseover',mouseOverFunction,true);
			_sliders[i].style.left = (_width * i) + 'px';
		}

		this.Loop();
	}

	this.Loop = function()
	{
		setTimeout(_instance.Loop,16);
		var left = 0;
		for(var i = 0;i < _sliders.length; i++)
		{

			var slideLeft = parseInt(_sliders[i].style.left);

			/*
			if(Math.abs(slideLeft - left) > _stepSize)
			{
				slideLeft += (slideLeft > left)?-_stepSize:_stepSize;
				_sliders[i].style.left = slideLeft + 'px';
			}		
			*/

			var moveBy = Math.abs(slideLeft - left) / _stepSize;
			if(Math.abs(slideLeft - left) > 1)
			{ 
				if(moveBy < 1) moveBy = 1;
				slideLeft += (slideLeft > left)?-moveBy:moveBy;
				_sliders[i].style.left = slideLeft + 'px';				
			}
			
			

			if(_sliders[i] == _activeSlide) left = left + _activeWidth;
			else left = left + _width;
		}
	}

	
	this.SlideMouseOver = function(element)
	{	
 		var image = GetElementByClass(element,'img','diapo');
		_activeWidth = image.clientWidth - _overlap;
		_width = (_container.clientWidth - _activeWidth) / (_sliders.length - 1);
		_activeSlide = element;
	}

	this.ContainerMouseOut = function()
	{
		_activeSlide = null;
		_width = _container.clientWidth /_sliders.length;
		//_instance.ResetSlides();
	}
}