菜鸟跟我学缓冲效果
首先我要说的是,我是菜鸟,这些文章是献给和我一样想要学习的菜鸟们. 论坛里有几位朋友发过缓冲效果,但是象我这种菜鸟看他们的代码实在是一种痛苦,因为不是一个层次的. 所以我用最最冗余的代码来写出这种效果,目的就是希望菜鸟们能看懂, 当我们不菜的时候我们再回头去看高手们的东西. 最后,请相信这句话:
有一天菜鸟也会成为高手,(前提是你要努力哈哈^^)
</ul>
</div>
</div><br />
<a href="#" onclick="scrol(); return false">向左滚动</a>
<a href="#" onclick="scror(); return false">向右滚动</a><br /><br />
当然,上面这种效果只是我用来演示缓冲效果的,<br /><br />
它并不适合做这种效果,因为我这里写的函数只会转一次.<br /><br />
多次的话用这种方法好象不是很好实现,<br /><br />
最后我说一下,不要被我这里的代码吓跑,<br /><br />看上去代码很多,主要是后面2个列子的原因使代码看起来很多<br /><br />
真正重要的是f_s(),s_f(),closeW()<br /><br />
如果能够看明白,那么你也可以举一反三了.<br /><br />
今天就说到这里了,希望这些东西能对你有一点帮助^^<br /><br />
by 褪色<br /><br />
<script type="text/javascript">
function scror(){
var obj=document.getElementById("s_img");
var h=function(){
var obj_w=parseInt(obj.style.width);
if(obj.scrollLeft<obj_w){
obj.scrollLeft=(obj.scrollLeft+Math.ceil((obj_w-obj.scrollLeft)/15));
}
else{
clearInterval(bw);
}
}
var bw=window.setInterval(h,1)
}
function scrol(){
var obj=document.getElementById("s_img");
var h=function(){
var obj_w=parseInt(obj.style.width);
if(obj.scrollLeft>1){
obj.scrollLeft-=Math.ceil(obj_w)/50;
}
else{
clearInterval(bw);
}
}
var bw=window.setInterval(h,1)
//obj.scrollLeft-=parseInt(obj.style.width);
}
</script>
</body>
</html>
关键代码请看这两个就可以了
function f_s(){
var obj=document.getElementById("box");//获取ID为box的对象
obj.style.display="block";//设置对象obj为显示
obj.style.width="1px"; //设置对象obj的宽度为1px
var changeW=function(){ //(关于函数这一点,什么闭包,什么类、原型的,弄的我头大了,以后慢慢理解吧。这里我理解的是创建一个函数直接量并把它存进变量changeW里)
var obj_w=parseInt(obj.style.width);//把对象的宽度转换为一个数值,并存入变量obj_w中;
if(obj_w<600){ //判断,如果宽度数值小于600
obj.style.width=(obj_w+Math.ceil((600-obj_w)/15))+"px";//计算对象的宽度。。。随着宽度的变长,递增量越来越小
}
else{
clearInterval(bw);//如果大于等于600的话,不再执行setInterval,意思就是这个时候停止增加宽度了。
}
}
var bw=window.setInterval(changeW,1)//每0.001秒调用一次changeW
and
//slow to fast 由慢到快
//声明一个函数s_f()
function s_f(){
var obj=document.getElementById("box2");
var e_add=1;//初始化递增量
obj.style.display="block";
obj.style.width="1px";
var changeW=function(){//我理解的是创建一个函数直接量并把它存进变量changeW里
var obj_w;e_add
obj_w=parseInt(obj.style.width);
e_add*=1.05;//以后每次递增的值都是
if(obj_w<600){
obj.style.width=(obj_w+e_add)+"px";//随着宽度的变长,递增量越来越大
}
else{
clearInterval(bw);
obj.style.width="600px";//因为(obj_w+e_add)这种计算方法会超出预定义的宽度,所以这里在缓冲完以后重新设置它的宽度.造成一种假象哈哈
}
}
var bw=window.setInterval(changeW,1)
}
经典论坛交流:
http://bbs.blueidea.com/thread-2883594-1-1.html
出处:蓝色理想