Javascript:图片无限循环滚动
分类:Pure Javascript 发表时间:2011年02月24日 字体大小:12号14号
早前为一位博友写了一个走马灯效果(增强型走马灯公告栏,可以抛弃marquee标签了,点击看效果),但时是基于jQuery库写的。效果实现的优点牵强。而且当时的效果是页面加载完后一片空白,只有开始播放后才从底部出来。
年前用wordpress给公司做内部信息分享平台时,有一块是用来横向无限循环播放展示team building的图片。之前的效果不适合,便又写了一段原生的js来实现。主要实现原理是间隔时间地设置一个overflow:hidden;的div的scrollLeft。
一、HTML代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div id="photo-list">
<ul id="scroll">
<li><a href="http://www.ihiro.org/intellij-idea"><img src="http://www.ihiro.org/blog/wp-content/uploads/2011/01/logo.jpg" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/javascript-getweek-by-date"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/12/calendar.jpg" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/beginning-python"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/12/beginning-python.jpg" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/css-position-hack"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/11/position-logo.jpg" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/text-range"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/11/text-range.jpg" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/html5-pro-ebook-recommendations"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/11/Pro_Html5_logo.jpg" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/jquery-plugin-recommended-maphighlight"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/10/maohightlight-logo.jpg" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/jquery-format-extend"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/09/jQuery.format_logo.png" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/information-september-2010-programming-language-list"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/08/2010.08.language-logo.jpg" width="100px" height="100px" alt=""/></a></li>
<li><a href="http://www.ihiro.org/example-selectbox-simulation"><img src="http://www.ihiro.org/blog/wp-content/uploads/2010/09/select_logo.png" width="100px" height="100px" alt=""/></a></li>
</ul>
</div> |
使用一个无需列表,通过左浮横向显示。设置容器div的尺寸,超出部分不显示。
二、CSS代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | * { padding:0; margin:0;} body { text-align:center;} #photo-list { /* 3张图片的宽度(包含宽度、padding、border、图片间的留白) 计算:3*(100+2*2+1*2+9) - 9 之所以减去9是第三张图片的右边留白 */ width:336px; /* 图片的宽度(包含高度、padding、border) 计算:100+2*2+1*2 */ height:106px; margin:50px auto; overflow:hidden; border:1px dashed #ccc; } #photo-list ul { list-style:none;} #photo-list li { float:left; padding-right:9px;} #photo-list img { border:1px solid #ddd; background:#fff; padding:2px;} |
注释中写明了容器div的尺寸计算方法。页面加载完成后未播放时的效果:
Firebug查看尺寸图:
三、JS代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | var id = function(el) { return document.getElementById(el); }, c = id('photo-list'); if(c) { var ul = id('scroll'), lis = ul.getElementsByTagName('li'), itemCount = lis.length, width = lis[0].offsetWidth, //获得每个img容器的宽度 marquee = function() { c.scrollLeft += 2; if(c.scrollLeft % width < = 1){ //当 c.scrollLeft 和 width 相等时,把第一个img追加到最后面 ul.appendChild(ul.getElementsByTagName('li')[0]); c.scrollLeft = 0; }; }, speed = 50; //数值越大越慢 ul.style.width = width*itemCount + 'px'; //加载完后设置容器长度 var timer = setInterval(marquee, speed); c.onmouseover = function() { clearInterval(timer); }; c.onmouseout = function() { timer = setInterval(marquee, speed); }; }; |
没有进行封装,只是实现效果。
- 上一篇: 新年:世纪公园梅展,阳光散步
- 下一篇: CSS:区分IE版本的三个方法
这个功能不错,做外贸站的时候产品的展示常常会用到这个。
用来做产品展示确实适合。
木有DEMO神马滴么!
我去瞎眼了!没看见watching demo哈。
正常都喜欢先看Demo,在看代码吧。所以Button是放在前面的。
嗯,不错,值得收藏,很有用。
都是代码,不是很了解啊
代码不错哦 收藏了
好像稍微有点一顿一顿的?
错觉~~
还是学不会,很希望自己懂得代码。那我就可以搞定我的免费减肥私教中心了
哇,好羡慕哦,我也好想学习JS,好想好想。。。
什么情况!
什么“什么情况”?
不错的功能,大多数网络公司给客户做网站都用到这个。
兔年吉祥~
不错,收藏了
功能看起来不错
已经有更好的封装,可以方便实现多种效果,奇赞无比!
换成文字是不是有异曲同工的效果。
原理一样的!
博客给力啊 继续加油
这个文章很好 受益了
这主题很炫,收下先,最近在纠结着换主题的事呢,翻一翻博主的博客,到处逛逛,呵呵….
这个有意思!
博客不错 这东西挺好的 大部分网站都需要用这功能
没有用JS框架的,,,而且这么精简。。。我不得不佩服。。。