一段代码··新手求注释

a_6543216_bbb 2011-08-13 02:15:20
<SCRIPT type=text/javascript>

var $ = function (id) {

return "string" == typeof id ? document.getElementById(id) : id;

};



var Extend = function(destination, source) {

for (var property in source) {

destination[property] = source[property];

}

return destination;

}



var CurrentStyle = function(element){

return element.currentStyle || document.defaultView.getComputedStyle(element, null);

}



var Bind = function(object, fun) {

var args = Array.prototype.slice.call(arguments).slice(2);

return function() {

return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));

}

}



var Tween = {

Quart: {

easeOut: function(t,b,c,d){

return -c * ((t=t/d-1)*t*t*t - 1) + b;

}

},

Back: {

easeOut: function(t,b,c,d,s){

if (s == undefined) s = 1.70158;

return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;

}

},

Bounce: {

easeOut: function(t,b,c,d){

if ((t/=d) < (1/2.75)) {

return c*(7.5625*t*t) + b;

} else if (t < (2/2.75)) {

return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;

} else if (t < (2.5/2.75)) {

return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;

} else {

return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;

}

}

}

}





//容器对象,滑动对象,切换数量

var SlideTrans = function(container, slider, count, options) {

this._slider = $(slider);

this._container = $(container);//容器对象

this._timer = null;//定时器

this._count = Math.abs(count);//切换数量

this._target = 0;//目标值

this._t = this._b = this._c = 0;//tween参数



this.Index = 0;//当前索引



this.SetOptions(options);



this.Auto = !!this.options.Auto;

this.Duration = Math.abs(this.options.Duration);

this.Time = Math.abs(this.options.Time);

this.Pause = Math.abs(this.options.Pause);

this.Tween = this.options.Tween;

this.onStart = this.options.onStart;

this.onFinish = this.options.onFinish;



var bVertical = !!this.options.Vertical;

this._css = bVertical ? "top" : "left";//方向



//样式设置

var p = CurrentStyle(this._container).position;

p == "relative" || p == "absolute" || (this._container.style.position = "relative");

this._container.style.overflow = "hidden";

this._slider.style.position = "absolute";



this.Change = this.options.Change ? this.options.Change :

this._slider[bVertical ? "offsetHeight" : "offsetWidth"] / this._count;

};

SlideTrans.prototype = {

//设置默认属性

SetOptions: function(options) {

this.options = {//默认值

Vertical: true,//是否垂直方向(方向不能改)

Auto: true,//是否自动

Change: 0,//改变量

Duration: 50,//滑动持续时间

Time: 10,//滑动延时

Pause: 4000,//停顿时间(Auto为true时有效)

onStart: function(){},//开始转换时执行

onFinish: function(){},//完成转换时执行

Tween: Tween.Quart.easeOut//tween算子

};

Extend(this.options, options || {});

},

//开始切换

Run: function(index) {

//修正index

index == undefined && (index = this.Index);

index < 0 && (index = this._count - 1) || index >= this._count && (index = 0);

//设置参数

this._target = -Math.abs(this.Change) * (this.Index = index);

this._t = 0;

this._b = parseInt(CurrentStyle(this._slider)[this.options.Vertical ? "top" : "left"]);

this._c = this._target - this._b;



this.onStart();

this.Move();

},

//移动

Move: function() {

clearTimeout(this._timer);

//未到达目标继续移动否则进行下一次滑动

if (this._c && this._t < this.Duration) {

this.MoveTo(Math.round(this.Tween(this._t++, this._b, this._c, this.Duration)));

this._timer = setTimeout(Bind(this, this.Move), this.Time);

}else{

this.MoveTo(this._target);

this.Auto && (this._timer = setTimeout(Bind(this, this.Next), this.Pause));

}

},

//移动到

MoveTo: function(i) {

this._slider.style[this._css] = i + "px";

},

//下一个

Next: function() {

this.Run(++this.Index);

},

//上一个

Previous: function() {

this.Run(--this.Index);

},

//停止

Stop: function() {

clearTimeout(this._timer); this.MoveTo(this._target);

}

};

</SCRIPT>

</head>

<body style="text-align:center">



<DIV id=idContainer2 class=container>

<TABLE id=idSlider2 border=0 cellSpacing=0 cellPadding=0>

<TBODY>

<TR>

<TD class=td_f><A href="http://www.lanrentuku.com/" target="_blank"><IMG src="images/01.jpg"></A></TD>

<TD class=td_f><A href="http://www.lanrentuku.com/" target="_blank"><IMG src="images/02.jpg"></A></TD>

<TD class=td_f><A href="http://www.lanrentuku.com/" target="_blank"><IMG src="images/03.jpg"></A></TD>

<TD class=td_f><A href="http://www.lanrentuku.com/" target="_blank"><IMG src="images/04.jpg"></A></TD>

<TD class=td_f><A href="http://www.lanrentuku.com/" target="_blank"><IMG src="images/05.jpg"></A></TD>

</TR></TBODY></TABLE>

<UL id=idNum class=num></UL>

</DIV>



<SCRIPT>

var forEach = function(array, callback, thisObject){

if(array.forEach){

array.forEach(callback, thisObject);

}else{

for (var i = 0, len = array.length; i < len; i++) { callback.call(thisObject, array[i], i, array); }

}

}



var st = new SlideTrans("idContainer2", "idSlider2", 5, { Vertical: false });



var nums = [];

//插入数字

for(var i = 0, n = st._count - 1; i <= n;){

(nums[i] = $("idNum").appendChild(document.createElement("li"))).innerHTML = ++i;

}



forEach(nums, function(o, i){

o.onmouseover = function(){ o.className = "on"; st.Auto = false; st.Run(i); }

o.onmouseout = function(){ o.className = ""; st.Auto = true; st.Run(); }

})



//设置按钮样式

st.onStart = function(){

forEach(nums, function(o, i){ o.className = st.Index == i ? "on" : ""; })

}

st.Run();

</SCRIPT>




很多看不懂··求注释···
...全文
166 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiage 2011-08-15
  • 打赏
  • 举报
回复
//首先这个一个工厂方法,通常用来获取dom对象.类似于jquery里的$('#...')方法.
//判断传入的是字符串还是其他对象,如果是字符串则返回id为该字符串的dom对象.
var $ = function (id) {

return "string" == typeof id ? document.getElementById(id) : id;

};


//这个方法应该叫做属性拷贝吧,遍历source的属性,然后填充的destination里,使destination具有source所有的public属性.
var Extend = function(destination, source) {

for (var property in source) {

destination[property] = source[property];

}

return destination;

}


//这个应该还有其他的js文件吧...
var CurrentStyle = function(element){

return element.currentStyle || document.defaultView.getComputedStyle(element, null);

}


//一般用于方法注入 例如给setTimeOut(fun,seconds,pars)例子:http://blog.csdn.net/xiage/article/details/4252126
var Bind = function(object, fun) {
//截取从第三个参数开始的所有参数
var args = Array.prototype.slice.call(arguments).slice(2);

return function() {
//把获取的参数传递给 传入的函数句柄(fun)
return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));

}

}


//这个就是定义对象了,具体的业务不解.
var Tween = {

Quart: {

easeOut: function(t,b,c,d){

return -c * ((t=t/d-1)*t*t*t - 1) + b;

}

},

Back: {

easeOut: function(t,b,c,d,s){

if (s == undefined) s = 1.70158;

return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;

}

},

Bounce: {

easeOut: function(t,b,c,d){

if ((t/=d) < (1/2.75)) {

return c*(7.5625*t*t) + b;

} else if (t < (2/2.75)) {

return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;

} else if (t < (2.5/2.75)) {

return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;

} else {

return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;

}

}

}

}
futurebp 2011-08-15
  • 打赏
  • 举报
回复
楼主人才啊、、
PerterPon 2011-08-13
  • 打赏
  • 举报
回复
这也叫一段代码?不如用Google把代码翻译成中文看吧
zlblog 2011-08-13
  • 打赏
  • 举报
回复
代码过长,无法注释。

欢迎光临我的博客
tarena5525 2011-08-13
  • 打赏
  • 举报
回复
路过,,,,
lijianc23 2011-08-13
  • 打赏
  • 举报
回复
这也太长了吧。。。

87,990

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧