找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2382|回复: 1

[教程] 转【菜鸟跟我学缓冲效果 】

[复制链接]
发表于 2012-3-13 23:17:56 | 显示全部楼层 |阅读模式 来自 中国–江苏–南京
本帖最后由 mseed 于 2012-3-13 23:20 编辑

首先我要说的是,我是菜鸟,这些文章是献给和我一样想要学习的菜鸟们.
论坛里有几位朋友发过缓冲效果,但是象我这种菜鸟看他们的代码实在是一种痛苦,因为不是一个层次的.
所以我用最最冗余的代码来写出这种效果,目的就是希望菜鸟们能看懂,
当我们不菜的时候我们再回头去看高手们的东西.
最后,请相信这句话:
有一天菜鸟也会成为高手,(前提是你要努力哈哈^^)

预览地址http://www.blueidea.com/tech/web/2009/6523.asp

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7. <style>
  8. body { font-size:12px}
  9. #box { background:#FFFFCC; border:1px solid #FFCC66; width:600px; height:100px;display:none; text-align:right; margin:2px; overflow:hidden}
  10. #box2 { background:#CDEDEC; border:1px solid #3399CC; width:600px; height:100px;display:none;text-align:right; margin:2px; overflow:hidden}
  11. .bt_down {background: #DDDCE4 url(http://bbs.blueidea.com/images/default/arrow_down.gif) no-repeat 35px 46%; padding:5px 20px 5px 5px; text-align:left}
  12. #my {}
  13. #my .my_ { background:#DDDCE4; width:200px; height:150px; display:none; overflow:hidden}
  14. #my .my_ ul{ list-style:none; padding:0; margin:10px 0 10px 10px; height:140px}
  15. #my .my_ ul li { width:48%; float:left; text-align:center; line-height:22px; border-bottom:1px solid #B6B6C0}
  16. #s_img { width:430px; overflow:scroll; overflow-y:hidden;overflow-x:hidden; border:1px solid #ccc}
  17. #imgs ul { list-style:none; margin-left:0; padding-left:0}
  18. #imgs ul li{ float:left; margin:3px;}
  19. </style>
  20. <script>
  21. //下面重复的类似的我就不做注释了~~
  22. //fast to slow 由快到慢
  23. //声明一个函数f_s()
  24. function f_s(){
  25. var obj=document.getElementById("box");//获取ID为box的对象
  26. obj.style.display="block";//设置对象obj为显示
  27. obj.style.width="1px"; //设置对象obj的宽度为1px
  28. var changeW=function(){ //(关于函数这一点,什么闭包,什么类、原型的,弄的我头大了,以后慢慢理解吧。这里我理解的是创建一个函数直接量并把它存进变量changeW里)
  29. var obj_w=parseInt(obj.style.width);//把对象的宽度转换为一个数值,并存入变量obj_w中;
  30. if(obj_w<600){ //判断,如果宽度数值小于600
  31. obj.style.width=(obj_w+Math.ceil((600-obj_w)/15))+"px";//计算对象的宽度。。。随着宽度的变长,递增量越来越小
  32. }
  33. else{
  34. clearInterval(bw);//如果大于等于600的话,不再执行setInterval,意思就是这个时候停止增加宽度了。
  35. }
  36. }
  37. var bw=window.setInterval(changeW,1)//每0.001秒调用一次changeW
  38. }
  39. //slow to fast 由慢到快
  40. //声明一个函数s_f()
  41. function s_f(){
  42. var obj=document.getElementById("box2");
  43. var e_add=1;//初始化递增量
  44. obj.style.display="block";
  45. obj.style.width="1px";
  46. var changeW=function(){//我理解的是创建一个函数直接量并把它存进变量changeW里
  47. var obj_w;e_add
  48. obj_w=parseInt(obj.style.width);
  49. e_add*=1.05;//以后每次递增的值都是
  50. if(obj_w<600){
  51. obj.style.width=(obj_w+e_add)+"px";//随着宽度的变长,递增量越来越大
  52. }
  53. else{
  54. clearInterval(bw);
  55. obj.style.width="600px";//因为(obj_w+e_add)这种计算方法会超出预定义的宽度,所以这里在缓冲完以后重新设置它的宽度.造成一种假象哈哈
  56. }
  57. }
  58. var bw=window.setInterval(changeW,1)
  59. }
  60. //关闭层
  61. function closeW(id,w){
  62. var obj=document.getElementById(id);//获取ID为box的对象
  63. obj.style.width=w;
  64. var closeDiv=function(){
  65. var obj_w=parseInt(obj.style.width);
  66. if(obj_w>1){
  67. obj.style.width=(obj_w-Math.ceil(obj_w)/20)+"px";//计算对象的宽度。。。随着宽度的变长,递增量越来越小
  68. }
  69. else{
  70. clearInterval(bw);
  71. obj.style.display="none";
  72. }
  73. }
  74. var bw=window.setInterval(closeDiv,1)//每0.001秒调用一次changeW
  75. }
  76. //下面这个函数是打开我的↓
  77. function open_my(){
  78. var obj=document.getElementById("my_");//获取ID为box的对象
  79. obj.style.display="block";//设置对象obj为显示
  80. obj.style.width="1px"; //设置对象obj的宽度为1px
  81. obj.style.height="1px";
  82. var changeW=function(){ //(关于函数这一点,什么闭包,什么类、原型的,弄的我头大了,以后慢慢理解吧。这里我理解的是创建一个函数直接量并把它存进变量changeW里)
  83. var obj_w=parseInt(obj.style.width);//把对象的宽度转换为一个数值,并存入变量obj_w中;
  84. var obj_h=parseInt(obj.style.height);
  85. if(obj_w<200 && obj_h<150){ //判断,如果宽度数值小于600
  86. obj.style.width=(obj_w+Math.ceil((200-obj_w)/20))+"px";//计算对象的宽度。。。随着宽度的变长,递增量越来越小
  87. obj.style.height=(obj_h+Math.ceil((150-obj_h)/15))+"px";
  88. }
  89. else{
  90. clearInterval(bw);//如果大于等于600的话,不再执行setInterval,意思就是这个时候停止增加宽度了。
  91. }
  92. }
  93. var bw=window.setInterval(changeW,1)//每0.001秒调用一次changeW
  94. }
  95. //下面这个函数是关闭我的↓显示出来的层
  96. function close_my(id){
  97. var obj=document.getElementById(id);//获取ID为box的对象
  98. var closeDiv=function(){
  99. var obj_w=parseInt(obj.style.width);
  100. var obj_h=parseInt(obj.style.height);
  101. if(obj_w>1 && obj_h >1){
  102. obj.style.width=(obj_w-Math.ceil(obj_w)/20)+"px";//计算对象的宽度。。。随着宽度的变长,递增量越来越小
  103. obj.style.height=(obj_h-Math.ceil(obj_h)/15)+"px";
  104. }
  105. else{
  106. clearInterval(bw);
  107. obj.style.display="none";
  108. }
  109. }
  110. var bw=window.setInterval(closeDiv,1)//每0.001秒调用一次changeW
  111. }
  112. </script>
  113. <body>
  114. 首先我要说的是,这些文章是献给和我一样想要学习的菜鸟们.<br /><br />
  115. 论坛里有几位朋友发过缓冲效果,但是象我这种菜鸟看他们的代码实在是一种痛苦,因为不是一个层次的.<br /><br />
  116. 所以我用最最冗余的代码来写出这种效果,目的就是希望菜鸟们能看懂,<br /><br />
  117. 当我们不菜的时候我们再回头去看高手们的东西.<br /><br />
  118. 最后,请相信这句话:<br /><br />
  119. 有一天菜鸟也会成为高手,(前提是你要努力哈哈^^)<br /><br />
  120. <a href="#" onclick="f_s()">由快到慢</a>  <br /><br />
  121. <a href="#" onclick="s_f(); return false">由慢到快</a>  <br /><br />
  122. <div id="box" ><h3>快->慢<a href="#" onclick="closeW('box','600px')">[关闭]</a></h3></div>
  123. <div id="box2" ><h3>慢->快<a href="#" onclick="closeW('box2','600px')">[关闭]</a></h3></div>
  124. <h3>我们既然做出这种效果了,就要把它应用到实际当中去</h3>
  125. <h3>现在来看一下缓冲效果在实际当中的应用</h3>
  126. <div id="my">
  127. <a href="#" class="bt_down" onmouseover="open_my()">我的</a>
  128. <div class="my_" id="my_" >
  129. <ul>
  130. <li>我的话题</li>
  131. <li>我的收藏</li>
  132. <li>我的权限</li>
  133. <li>我的投票</li>
  134. <li>我的活动</li>
  135. <li>我的同城</li>
  136. <li>我的作品</li>
  137. <li>我的地址</li>
  138. <li>我的专长</li>
  139. <li>我的好友</li>
  140. <li>我的空间</li>
  141. <li><a href="#" onclick="close_my('my_')">关闭</a></li>
  142. </ul>
  143. </div>
  144. </div>
  145. <br />
  146. <br />
  147. <div id="s_img" style="width:430px;">
  148. <div id="imgs" style="width:1700px;">
  149. <ul>
  150. <li><img src="http://case.blueidea.cn/files/2008/09/02/work_577_8421_20080902_112516_6677857_t.jpg" /></li>
  151. <li><img src="http://case.blueidea.cn/files/2008/09/01/work_352426_8413_20080901_201448_1164245_t.jpg" /></li>
  152. <li><img src="http://case.blueidea.cn/files/2008/08/29/work_291488_8330_20080829_151402_6235352_t.jpg" /></li>
  153. <li><img src="http://case.blueidea.cn/files/2008/09/02/work_577_8423_20080902_115301_643310_t.jpg" /></li>
  154. <li><img src="http://case.blueidea.cn/files/2008/08/30/work_23709_8344_20080830_123900_9878235_t.jpg" /></li>
  155. <li><img src="http://case.blueidea.cn/files/2008/09/01/work_387129_8408_20080901_180829_5234680_t.png" /></li>
  156. <li><img src="http://case.blueidea.cn/files/2008/08/31/work_443685_8362_20080831_093043_8349305_t.jpg" /></li>
  157. <li><img src="http://case.blueidea.cn/files/2008/09/01/work_202433_8401_20080901_163123_1710510_t.jpg" /></li>

  158. </ul>
  159. </div>
  160. </div><br />
  161. <a href="#" onclick="scrol(); return false">向左滚动</a>
  162. <a href="#" onclick="scror(); return false">向右滚动</a><br /><br />
  163. 当然,上面这种效果只是我用来演示缓冲效果的,<br /><br />
  164. 它并不适合做这种效果,因为我这里写的函数只会转一次.<br /><br />
  165. 多次的话用这种方法好象不是很好实现,<br /><br />
  166. 最后我说一下,不要被我这里的代码吓跑,<br /><br />看上去代码很多,主要是后面2个列子的原因使代码看起来很多<br /><br />
  167. 真正重要的是f_s(),s_f(),closeW()<br /><br />
  168. 如果能够看明白,那么你也可以举一反三了.<br /><br />
  169. 今天就说到这里了,希望这些东西能对你有一点帮助^^<br /><br />
  170.                                           by 褪色<br /><br />
  171. <script type="text/javascript">
  172. function scror(){
  173. var obj=document.getElementById("s_img");
  174. var h=function(){
  175. var obj_w=parseInt(obj.style.width);
  176. if(obj.scrollLeft<obj_w){
  177. obj.scrollLeft=(obj.scrollLeft+Math.ceil((obj_w-obj.scrollLeft)/15));
  178. }
  179. else{
  180. clearInterval(bw);
  181. }
  182. }
  183. var bw=window.setInterval(h,1)
  184. }
  185. function scrol(){
  186. var obj=document.getElementById("s_img");
  187. var h=function(){
  188. var obj_w=parseInt(obj.style.width);
  189. if(obj.scrollLeft>1){
  190. obj.scrollLeft-=Math.ceil(obj_w)/50;
  191. }
  192. else{
  193. clearInterval(bw);
  194. }
  195. }
  196. var bw=window.setInterval(h,1)
  197. //obj.scrollLeft-=parseInt(obj.style.width);
  198. }
  199. </script>
  200. </body>
  201. </html>
复制代码

评分

参与人数 1金币 +1 收起 理由
流星玛丽 + 1 很给力!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

 楼主| 发表于 2012-3-13 23:19:11 | 显示全部楼层 来自 中国–江苏–南京
关键代码请看这两个就可以了
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
}

//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)
}

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-19 00:49 , Processed in 0.049085 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表