我是用css的动画来实现左右切换图片的。但是按照这个思路后边有点没思路了,请教
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | .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; } |
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 | <!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 > |
如代码
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 29 30 31 32 33 34 35 | //封装一个代替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积分~
来为老师/同学的回答评分吧