2009
10.13
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();
测试回复