我是用css的动画来实现左右切换图片的。但是按照这个思路后边有点没思路了,请教
.box{ position: absolute; z-index: 3; width: 4560px;/*超出.banner的部分隐藏*/ height: 700px; transform: translate(0, 0); left: 0px; animation-name: box1; animation-duration: 10s; animation-iteration-count: infinite; animation-play-state: running; } @-webkit-keyframes box1{ 0%{transform: translate(0, 0);} 20%{transform: translate(0, 0);} 25%{transform: translate(-1520px, 0);} 45%{transform: translate(-1520px, 0);} 50%{transform: translate(-3040px, 0);} 70%{transform: translate(-3040px, 0);} 75%{transform: translate(0, 0);} 100%{transform: translate(0, 0);} } .c1{ width: 1520px; height: 700px; float: left; z-index: 3; float: left;/*为了使图片轮播实现从右向左的切换,就得是在同一行存放图片*/ left: 0px; } .c2{ width: 1520px; height: 700px; float: left; z-index: 3; float: left;/*为了使图片轮播实现从右向左的切换,就得是在同一行存放图片*/ left: 1520px; } .c3{ width: 1520px; height: 700px; float: left; z-index: 3; float: left;/*为了使图片轮播实现从右向左的切换,就得是在同一行存放图片*/ left: 3040px; } .dots{ position: absolute; right: 20px; bottom: 10px; text-align: right; z-index: 6; } .dots>span{ display: inline-block; width: 8px; height: 8px; margin-right: 10px; border-radius: 50%; background-color: rgba(0, 0, 0, 0.4); line-height: 10px; box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5) ;/*CSS3新增的阴影属性*/ } .dots>span.active{ box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.5); background: #fff; }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>首页</title> <link rel="stylesheet" type="text/css" href="CSS/style.css"> </head> <body> <section class="main" id="main"> <div class="banner"> <div class="box" id="box"> <img class="c1" src="img/1.jpg"> <img class="c2" src="img/2.jpg"> <img class="c3" src="img/3.jpg"> </div> <div class="dots" id="dots"> <span class="active"></span> <span></span> <span></span> </div> </div> </section> <script type="text/javascript" src="js/script.js"></script> </body> </html>
如代码
//封装一个代替getElementById()的方法 function byId(id){ return typeof(id) === "string"?document.getElementById(id):id; } //声明全局变量 //就不用传参了 var a1 = byId("box").getElementsByTagName("div");//取到ID为box的div标签 //封装一个更改动画状态的函数 function mouseStop(){ var a2 = byId("box"); a2.onmouseover = function(){//鼠标划过暂停 a2.style.animationPlayState="paused"; } a2.onmouseout = function(){//鼠标离开继续 a2.style.animationPlayState="running"; } } //封装一个鼠标移过圆点时触发切换到对应图片的效果方法 function circleChange(){ //绑定事件前先把要绑定的对象取出来并声明 var box = byId("box");//取到ID为Box的div var dots = byId("dots").getElementsByTagName("span"); console.log(dots[0]); dots[0].onmouseover = function(){ //box.style.transform="translate(-1520px,0)";. box.style.left = "-1520px"; } } circleChange(); mouseStop();
按照我写的,是通过css控制关键帧来实现的图片自动切换效果,类似于胶片式。
但是在实现划过圆点切换至对应图片那里没思路了,如果按照上述js代码触发事件改变图片的位置会导致图片位置混乱,因为会修改了图片的初始位置,动画就乱掉了。
请教 按照我这个思路,应该如何实现切换至对应图片位置?
48
收起
正在回答
6回答
你是想实现图片左右滑动轮播的效果吗?建议这么实现:定义一个全局变量index,在定时器中每隔一定的时间改变它的值,然后让box的left值向左移动index*(每张图片的宽度)。鼠标移入原点的时候,获取到该原点的索引值,赋值给index,然后让box的left改变为:index*(每张图片的宽度)。
其实和案例中的思路是一样的,都是通过控制关键索引值来实现的,只是案例是图片display:block和none,你想要的效果是改变包含着图片的大盒子left值。
嘘_别说话
2018-01-08 15:29:33
https://www.jianshu.com/p/5c7c427eb557
你可以看看这个里面介绍的轮播,应该就是跟你的一样,通过元素的left值来实现图片的切换。
HTML5与CSS3实现动态网页 2018
- 参与学习 1887 人
- 提交作业 4643 份
- 解答问题 5760 个
有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星