JavaScript 轮播图(含过渡动画)
<div class="cnblogs_code"><pre><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*<span style="color: rgba(0, 0, 0, 1)">{
list</span>-<span style="color: rgba(0, 0, 0, 1)">style: none;
margin: </span>0<span style="color: rgba(0, 0, 0, 1)">;
padding: </span>0<span style="color: rgba(0, 0, 0, 1)">;
}
#outer{
width: 320px;
height: 300px;
margin: 50px auto;
background</span>-<span style="color: rgba(0, 0, 0, 1)">color: lightpink;
padding: 12px 0px ;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">上右下左</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
overflow: hidden;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">隐藏溢出内容</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
position: relative;
}
#imgList{
width: ;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">用js来自动设置#imgList宽度</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
position: absolute; </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">子元素相对父元素的绝对定位</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
left:;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">每移320px 到下一张</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
}
#imgList li{
</span><span style="color: rgba(0, 0, 255, 1)">float</span><span style="color: rgba(0, 0, 0, 1)">: left;
padding: 0px 10px;
}
#navDiv{
position: absolute;
bottom: 15px;
left: ;</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">通过js来自动设置导航居中</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
}
#navDiv a{
width: 15px;
height: 15px;
background</span>-<span style="color: rgba(0, 0, 0, 1)">color: red;
margin: </span>0<span style="color: rgba(0, 0, 0, 1)"> 5px;
</span><span style="color: rgba(0, 0, 255, 1)">float</span><span style="color: rgba(0, 0, 0, 1)">: left;
opacity: </span>0.5;<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">设置透明</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
}
#navDiv a:hover{ </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">设置鼠标移入效果</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
background</span>-<span style="color: rgba(0, 0, 0, 1)">color: black;
}
</span></style>
</head>
<body>
<div id="outer">
<ul id="imgList">
<li><img src="img/1.jpg"/></li>
<li><img src="img/2.jpg"/></li>
<li><img src="img/3.jpg"/></li>
<li><img src="img/4.jpg"/></li>
<li><img src="img/1.jpg"/></li>
</ul>
<!--创建图片导航按钮-->
<div id="navDiv">
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
<a href="javascript:;"></a>
</div>
</div>
</body>
<script type="text/javascript" >
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">尝试构造一个可以执行简单动画的函数
* -参数:
* obj:要执行动画的对象
* attr:要执行动画的样式,如left top width height
* target:执行动画的目标位置
* speed:移动的速度(正数右移,负数左移)
* callback:回调函数,这个函数会在动画执行完毕以后执行
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> move(obj,attr,target,speed,callback){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">关闭上一个定时器,防止加速</span>
<span style="color: rgba(0, 0, 0, 1)"> clearInterval(obj.timer);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取元素目前的位置</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> current=<span style="color: rgba(0, 0, 0, 1)">parseInt(getStyle(obj,attr));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断速度的正负</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">如果从0到800移动,则speed为正,800到0移动,为负</span>
<span style="color: rgba(0, 0, 255, 1)">if</span>(current><span style="color: rgba(0, 0, 0, 1)">target){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">此时speed为负</span>
speed=-<span style="color: rgba(0, 0, 0, 1)">speed;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">-开启一个定时器,来执行动画效果</span>
obj.timer=setInterval(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取目标原来的left值</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> oldValue=<span style="color: rgba(0, 0, 0, 1)">parseInt(getStyle(obj,attr));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在旧值的基础上增加</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> newValue=oldValue+<span style="color: rgba(0, 0, 0, 1)">speed;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>((speed<0&&newValue<target)||(speed>0&&newValue><span style="color: rgba(0, 0, 0, 1)">target)){
newValue</span>=<span style="color: rgba(0, 0, 0, 1)">target;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">将新值设置给目标</span>
obj.style=newValue+"px"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(newValue==<span style="color: rgba(0, 0, 0, 1)">target){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">到达目标值,关闭定时器</span>
<span style="color: rgba(0, 0, 0, 1)"> clearInterval(obj.timer);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">动画执行完毕,调用回调函数</span>
callback&&<span style="color: rgba(0, 0, 0, 1)">callback();
}
},</span>30<span style="color: rgba(0, 0, 0, 1)">);
}
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">定义一个元素,来获取指定元素的当前的样式
* -参数:
* obj:要获取样式的元素
* name:要获取的样式名
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> getStyle(obj,name){
</span><span style="color: rgba(0, 0, 255, 1)">return</span> getComputedStyle(obj,<span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">);
}
</span></script>
<script type="text/javascript">
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1.自动设置#imgList宽度</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> imgList=document.getElementById("imgList"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> imgArr=document.getElementsByTagName("li"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">使宽度随图片自动变化</span>
imgList.style.width=320*imgArr.length+"px"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">2.自动设置导航居中</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> navDiv=document.getElementById("navDiv"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> outer=document.getElementById("outer"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置#navDiv随图片自动变化</span>
navDiv.style.left=(outer.offsetWidth-navDiv.offsetWidth)/2+"px";
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">3.默认当前图片下的导航按钮</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> allA=document.getElementsByTagName("a"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> index=0<span style="color: rgba(0, 0, 0, 1)">;
allA.style.backgroundColor</span>="black"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">4.点击第x个超链接显示第x张图片</span>
<span style="color: rgba(0, 0, 255, 1)">for</span>(i=0;i<allA.length;i++<span style="color: rgba(0, 0, 0, 1)">){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">为获取点击的是第几个超连击,来添加一个num属性</span>
allA.num=<span style="color: rgba(0, 0, 0, 1)">i;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">为a添加单击函数</span>
allA.onclick=<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置点击动画优先,点击先结束自动动画</span>
<span style="color: rgba(0, 0, 0, 1)"> clearInterval(timer);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> alert(this);</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取点击的a的索引</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> alert(this.num);</span>
index=<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.num;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">切换图片</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> imgList.style.left=-320*index+"px";</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">换成动画效果</span>
move(imgList,"left",-320*index,20,<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置点击动画优先,再又开始自动动画</span>
<span style="color: rgba(0, 0, 0, 1)"> start();
});
setA();
}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">5.创建一个方法来设置选中的a</span>
<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> setA(){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断</span>
<span style="color: rgba(0, 0, 255, 1)">if</span>(index>=imgArr.length-1<span style="color: rgba(0, 0, 0, 1)">){
index</span>=0<span style="color: rgba(0, 0, 0, 1)">;
imgList.style.left</span>=0<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置不点击的变回红色</span>
<span style="color: rgba(0, 0, 255, 1)">for</span>(i=0;i<allA.length;i++<span style="color: rgba(0, 0, 0, 1)">){
allA.style.backgroundColor</span>=""<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">选中的设置为黑色</span>
allA.style.backgroundColor="black"<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">6.自动切换图片</span>
<span style="color: rgba(0, 0, 0, 1)"> start();
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> timer;
</span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> start(){
timer</span>= setInterval(<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
index</span>++<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断</span>
index=index % imgArr.length;<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">同上面的if判断 0%4=4 1%4=1 ...4%4=0</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">轮播</span>
move(imgList,"left",-320*index,20,<span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">修改对应导航按钮</span>
<span style="color: rgba(0, 0, 0, 1)"> setA();
});
},</span>3000<span style="color: rgba(0, 0, 0, 1)">)
} <br> //动画轮播图终于完成
</span></script>
</html></pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/wangdongwei/p/11311861.html
頁:
[1]