前端作品三之——轮回滚动电影海报
1、功能概述
通过HTML、CSS3、javascript语言编写的一个能自动播放的图片轮回滚动的图片播放器。鼠标自动播放时,每播放一张图片的距离就暂停1s。当我们鼠标移进海报图片时播放停止,鼠标移出播放继续。当鼠标移至左右按钮时,图片播放方向改变,按钮颜色也变成紫色,鼠标移出则恢复正常。总共选了四张电影海报图片,加上一张按钮图片。
2、选材布局
选择了四张电影海报的图片,和 一个包含四个方向按钮的图片。将图片并排居中显示在页面上,将包含方向按钮的<a>标签大小设置成只能容纳一个按钮,其他部分隐藏

3、功能实现
将包含四张电影图片的ul的innerHTML变成两倍。这样就有8张图片,当ul的offsetLeft小于等于-oUl.style.Width/2时,将offsetLeft赋值0;当ul的offsetLeft大于等于0时,将offsetLeft赋值-oUl.style.Width/2。
创建一个doMove()函数,使图片每秒以width=offsetLeft+speed的速度运动,并在里面设置setTimeOut定时器每播放一张图片的距离,暂停一秒。定义一个speed变量来控制滚动速度,通过判断哪个按钮来确定speed正负,如此达到图片向左走,向右走的效果。
创建startMove()函数,判断图片移动方向,并设置定时器,每30ms,运行doMove()。并创建stopMove()函数来在需要的时候清除doMove里的定时器。
当鼠标移入ul时,调用stopMove(),移出则重新调用startMove。鼠标移入移出按钮时,设置一个变量,通过函数传参来控制startMove(moveLeft),判断moveLeft真假,来决定speed正负。
感觉功能的确表述的多而且混乱,之后还是得理清楚,应该会有更好解释、逻辑性更好的方式。
<!doctype html> <html> <head> <!-- 敲者:ChenZz~ --> <meta charset="utf-8"> <title>滚动电影海报</title> <link href="gd_style.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="gd.js"> </script> </head> <body> <div class="roll" id="roll"> <a href="javascript:void(0);" class="btn_left"></a> <a href="javascript:void(0);" class="btn_right"></a> <div class="wrap"> <ul> <li><a href="http://movie.douban.com/subject/1866473/?from=showing"><img src="images/1.jpg" /></a></li> <li><a href="http://movie.douban.com/subject/25964071/?from=showing"><img src="images/2.jpg" /></a></li> <li><a href="http://movie.douban.com/subject/20645098/?from=showing"><img src="images/3.jpg" /></a></li> <li><a href="http://movie.douban.com/subject/25800699/?from=showing"><img src="images/4.jpg" /></a></li> </ul> </div> </div> </body> </html>
var moveLeft=true; var gTimer=null; var gTimerOut=null; var speed=2; window.onload=function () { var oDiv=document.getElementById('roll'); var oUl=oDiv.getElementsByTagName('ul')[0]; var aLi=oUl.getElementsByTagName('li'); var aA=oDiv.getElementsByTagName('a'); var i=0; var str=oUl.innerHTML+oUl.innerHTML; oUl.innerHTML=str; oUl.style.width=aLi[0].offsetWidth*aLi.length+'px'; for(i=0;i<aLi.length;i++) { aLi[i].onmouseover=function () { stopMove(); }; aLi[i].onmouseout=function () { startMove(moveLeft); }; } aA[0].onmouseover=function () { startMove(true); }; aA[1].onmouseover=function () { startMove(false); }; startMove(true); }; function startMove(bLeft) { moveLeft=bLeft; if(gTimer) { clearInterval(gTimer); } gTimer=setInterval(doMove, 30); } function stopMove() { clearInterval(gTimer); gTimer=null; } function doMove() { var oDiv=document.getElementById('roll'); var oUl=oDiv.getElementsByTagName('ul')[0]; var aLi=oUl.getElementsByTagName('li'); var l=oUl.offsetLeft; if(moveLeft) { l-=speed; if(l<=-oUl.offsetWidth/2) { l=0; } } else { l+=speed; if(l>=0) { l=-oUl.offsetWidth/2; } } if(Math.abs(l-Math.round(l/aLi[0].offsetWidth)*aLi[0].offsetWidth)<Math.ceil(speed/2)) { stopMove(); gTimerOut=setTimeout ( function () { startMove(moveLeft); }, 1000 ); l=Math.round(l/aLi[0].offsetWidth)*aLi[0].offsetWidth; } oUl.style.left=l+'px'; }
* { padding: 0; margin: 0; } li { list-style: none; } img { border: 0; } .roll { width: 880px; height: 200px; margin: 50px auto 0; position: relative; } .btn_left { display: block; width: 68px; height: 68px; background: url(images/btn.jpg) no-repeat -70px -69px; position: absolute; top: 66px; left: 0px; z-index: 1; } .btn_left:hover { background: url(images/btn.jpg) no-repeat -70px 0; } .btn_right { display: block; width: 68px; height: 68px; background: url(images/btn.jpg) no-repeat 1px -69px; position: absolute; top: 66px; right: 0; z-index: 1; } .btn_right:hover { background: url(images/btn.jpg) no-repeat 1px 0; } .roll .wrap { width: 728px; height: 200px; margin: 0 auto; position: relative; overflow: hidden; } .roll ul { position: absolute; top: 0; left: 0; } .roll li { float: left; width: 182px; height: 200px; text-align: center; } .roll li a:hover { position: relative; top: 2px; }

浙公网安备 33010602011771号