2009
10.13

图片滚动(自动)

在right()判断中,应该是Math.abs(xpos)>0的时候向左移动了,当时想的是deta,最重要的一点是:当left()结束后才是right()的,我当时理解错误

还有一个判断就是当right结束后,运行left,开始我一直都Math.abs(xpos)>0,其实xpos一直都还是负数,所以要把Math.abs()去掉才是可以的

function getFirstNodes( obj ){  // obj = sliderPanel
  var arr = [];
  var i = 0,k=0;
  while(obj.childNodes[i])
  {
	  if(obj.childNodes[i].nodeType == 1)
	  {
		  arr[k] = obj.childNodes[i];
		  k = k+1;
	  }
	  i++;
  }
  return arr;
};

function getStyle( elem, name )
{
	if (elem.style[name])
		return elem.style[name];
	else if (elem.currentStyle)
		return elem.currentStyle[name];
	else if (document.defaultView && document.defaultView.getComputedStyle) {
		name = name.replace(/([A-Z])/g,"-$1");
		name = name.toLowerCase();
		var s = document.defaultView.getComputedStyle(elem,"");
		return s && s.getPropertyValue(name);}
		else return null;
};

var slider = {
	step: 0, maxamount: 0, minamount: 0,
     obj: null, dhtype:'linear', dh: null,

	ready:function(mo) {
	    this.obj = getFirstNodes(mo)[0];
		var subo = getFirstNodes(this.obj);
		var w = getStyle(subo[0],'width');
		mo.style['width'] = w;
		this.step = parseInt(w);
		var sumWidth = this.step * subo.length; 

		getFirstNodes(mo)[0].style['width'] = sumWidth +'px';
	},
	left:function() {
		var xpos = parseInt(demo.style.left);
		var deta = parseInt(demo.style.width) - parseInt(wrap.style.width);
		if(Math.abs(xpos)<deta) {
			 xpos=xpos-slider.step;
		}

		demo.style.left = xpos + 'px';
		var left = setTimeout('slider.left()',800);
		if(Math.abs(xpos)>deta){
		   clearTimeout(left);
		   slider.right()
		}
	},
	right:function(){
		var xpos = parseInt(demo.style.left);
		var deta = parseInt(demo.style.width) - parseInt(wrap.style.width);
		if(Math.abs(xpos)>0) {
		  xpos=xpos+slider.step;
		}
		demo.style.left = xpos + 'px';
		var right = setTimeout('slider.right()',800);
		if(xpos>slider.step){
			clearTimeout(right);
			slider.left();
		}
	}
}

var current  = 0;
var wrap = document.getElementById("wrap");
    slider.ready(wrap);
var demo = slider.obj;
    slider.obj.style.left = 5 + 'px'  //不知何原因一定要设置
    slider.left();

已有 1 个回复

添加回复
  1. 测试回复