扫码关注官方订阅号
如上图设计原型,网上找不到类似的轮播插件。尝试自己制作,没有较好的js思路。毕竟它跟大多数的轮播图有点差距:1、首屏显示了三张图片。2、左右图片仅显示一部份,如左图隐藏了左边部分,右图隐藏了右边部份。3、每张图片之间均有一定的间距。4、中间的大图比两边的图片显示尺寸变大。(所有图片都是16:9)
人生最曼妙的风景,竟是内心的淡定与从容!
唉~ 写了半天~ 累啊
<!DOCTYPE html><html> <head> <meta http-equiv="Cache-Control" content="no-transform " /> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="chrome=1" /> <meta name="renderer" content="webkit" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>轮播图 | 杰凯寇赞</title> <style> html,body {height: 100%} html {background: #222;color:#fff;} body {margin: 0;font-family: Roboto,Helvetica,Arial,Microsoft JhengHei,sans-serif} .viewport {width: 944px;height:283px;position: relative;overflow: hidden;} .father {width:3000%;height:100%;padding: 20px 0;box-sizing: border-box;transition: transform 0.6s ease-in-out;transform: translate3d(0,0,0);background: #ff5252;} .father.moving {transition-duration: 0s;} .father > p {width: 432px;height: 243px;margin: 0 20px;opacity:0.6;transition: all 0.6s ease-in-out;background: #2dbe60;float: left;} .father.moving > p {transition-duration: 0s;} .father > p.showing {opacity: 1;transform: scale3d(1.1, 1.1, 1);} .left, .right {width: 30px;height: 100%;line-height: 283px;user-select:none;text-align: center;cursor: pointer;background: rgba(0,0,0,0.15);position: absolute;top: 0;} .left {left: 0;} .right {right: 0;} </style> </head> <body> <p class="viewport"> <p class="father" id="father"> <p>A</p><!-- 1 --> <p>B</p> <p>C</p><!-- 3 --> <p>D</p> <p>E</p><!-- 5 --> <p>F</p> <p>G</p><!-- 7 --> <!-- ^…^ --> <p>A</p><!-- 1 --> <p>B</p> <p>C</p><!-- 3 --> <p>D</p> <p>E</p><!-- 5 --> <p>F</p> <p>G</p><!-- 7 --> <!-- Counting is too hard. --> <p>A</p><!-- 1 --> <p>B</p> <p>C</p><!-- 3 --> <p>D</p> <p>E</p><!-- 5 --> <p>F</p> <p>G</p><!-- 7 --> </p> <p class="left" id="left">:-o</p> <p class="right" id="right">:-)</p> </p> <script type="text/javascript"> var father=document.getElementById("father"), sons=father.children, sonsLength=sons.length/3, showWidth=432+20*2, //432: width; 20*2: margin*2 showingId=parseInt(sonsLength/2)+sonsLength-1, transform=-showingId*showWidth+showWidth/2, checkTime=new Date() father.style.transform=`translate3d(${transform}px, 0, 0)` sons[showingId].className="showing" function go(nowShowingId, direction) { // Direction: "-1" stands for left, "1" stands for right. //+ Avoid continuous sliding if(new Date()-checkTime<700)return checkTime=new Date() //+ Standard show change sons[nowShowingId].className="" //- Change here nowShowingId=nowShowingId+direction showingId=nowShowingId; transform=nowShowingId*showWidth-showWidth/2 father.style.transform=`translate3d(-${transform}px, 0, 0)` sons[nowShowingId].className="showing" //+ Special show change if(nowShowingId==1){ showingId=sonsLength*2+1 // How does it works? } else if(nowShowingId==sonsLength*2+2){ showingId=1+1 // Imagine the answer. (Use DevTools! } else {return} //- change here setTimeout(function(){ father.classList.add("moving") sons[showingId].className="showing" setTimeout(function(){ father.style.transform=`translate3d(-${showingId*showWidth-showWidth/2}px, 0, 0)` sons[nowShowingId].className="" setTimeout(function(){ father.classList.remove("moving") },50) // =1. },530) // =2. },100) // =3. /= 1,2,3: Specified like that because of setTimeout's time error } document.getElementById("left").onclick=function (){go(showingId, -1)} document.getElementById("right").onclick=function (){go(showingId, 1)} </script> </body></html>
原理可以参考随后这篇文章新货!如何制作一个高效轮播图?
思路和普通轮播是一样的
想办法给居中图片加上scale()
http://www.jsdaima.com/p-340....
http://www.zhangxinxu.com/stu...
http://www.zhangxinxu.com/wor...这个是现实
轮播图插件的话,可以百度swiper,设置slidesPerView,来确定图片显示个数。额,设置两边显示部分图片?可以参考swiper源码,应该是设置 loop模式,slidesPerView设为auto吧。。。记不太清楚了,可以去swiper中文官网看一下
轮播图 网上有很多插件 可以去找找
像swipe swiper superSlide 等等 有很多
swipe swiper superSlide
轮播图 原理都是一样的 你只要会写一种 另一种也就会了
网上如果没有你需要的这种插件的话 你可以自己写一个轮播图
这个 也就是一个大的p包含一个ul 然后显示 几个li
p
ul
li
每个li里边有一张图片
然后在设置初始位置的时候
你设置整个ul的left为li的(-width/2) 也就是整个ul向左挪动一段距离
left
(-width/2)
然后再用按照常规的轮播图 的做法
用setInterval控制 运动 就可以了
setInterval
插件到处都是 自己找 不要说没有
网上各种轮播图的源码都有很多啊,php中文网下载站
1、首屏显示3张图片
说明显示内容块的宽度大于一张图片的宽度
2、左右各显示一部分
说明当前显示的图片居中,这样两边还有空位,而图片与图片的距离不足以填满空白距离,因此下一张图片和前一张图片会显示部分出来。
3、每一张图片有间距
这里可以是margin,也可以是在做定位后left的时候,就把这个距离算进去了。
4、中间的大图
中间的大图没有透明度,表示它是当前显示的图片,因而会以完整图的形式显示,自然要比旁边的只有部分且带有透明的图要大。
总的来说,如果能在看到多张图片,那么它的margin或者是left的值比较小,使得非当前图片也会看到;如果值比较大,已经超过内容块了,那么你始终只有看到一张图片。
现在用纯css就可以实现了
思路:
1、确定总数:你需要复制藏在背后的图片,比如轮播三张,这样是为了应付左右移动时图片过渡的情景,在左右要各自多复制一张图片。 顺序是 3,1,2,3,1;
2、图片布局:第一张图片的定位,每一张的间隔控制好,上面说的三张图片,最左的3和最右的1隐掉这样只能看到中间的,1,2,3;
3、动画控制:在图片上做一个框,框内的显示,框外的不显示;用css3的动画控制移动动画,动画要控制要做的最主要是对当前索引的控制;当前是什么,上一张是什么,下一张是什么,每次动画左右肯定有一张图片移动,比如,3,1,2,3,1 变成 1,2,3,1,2 或 2,3,1,2,3。 这其中开始、中间、结束都有状态变化,这时候做好状态以及doc的控制。
做好以上三步差不多就出来这个效果,后期就是一些微调,比如动画时间快慢等细节的控制;
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
唉~ 写了半天~ 累啊
原理可以参考随后这篇文章新货!如何制作一个高效轮播图?
思路和普通轮播是一样的
想办法给居中图片加上scale()
http://www.jsdaima.com/p-340....
http://www.zhangxinxu.com/stu...
http://www.zhangxinxu.com/wor...
这个是现实
轮播图插件的话,可以百度swiper,设置slidesPerView,来确定图片显示个数。额,设置两边显示部分图片?可以参考swiper源码,应该是设置 loop模式,slidesPerView设为auto吧。。。记不太清楚了,可以去swiper中文官网看一下
轮播图 网上有很多插件 可以去找找
像
swipe swiper superSlide等等 有很多轮播图 原理都是一样的 你只要会写一种 另一种也就会了
网上如果没有你需要的这种插件的话 你可以自己写一个轮播图
这个 也就是一个大的
p包含一个ul然后显示 几个li每个
li里边有一张图片然后在设置初始位置的时候
你设置整个
ul的left为li的(-width/2)也就是整个ul向左挪动一段距离然后再用按照常规的轮播图 的做法
用
setInterval控制 运动 就可以了插件到处都是 自己找 不要说没有
网上各种轮播图的源码都有很多啊,php中文网下载站
1、首屏显示3张图片
2、左右各显示一部分
3、每一张图片有间距
4、中间的大图
总的来说,如果能在看到多张图片,那么它的margin或者是left的值比较小,使得非当前图片也会看到;如果值比较大,已经超过内容块了,那么你始终只有看到一张图片。
现在用纯css就可以实现了
思路:
1、确定总数:
你需要复制藏在背后的图片,比如轮播三张,这样是为了应付左右移动时图片过渡的情景,在左右要各自多复制一张图片。 顺序是 3,1,2,3,1;
2、图片布局:
第一张图片的定位,每一张的间隔控制好,上面说的三张图片,最左的3和最右的1隐掉这样只能看到中间的,1,2,3;
3、动画控制:
在图片上做一个框,框内的显示,框外的不显示;
用css3的动画控制移动动画,动画要控制要做的最主要是对当前索引的控制;当前是什么,上一张是什么,下一张是什么,每次动画左右肯定有一张图片移动,比如,3,1,2,3,1 变成 1,2,3,1,2 或 2,3,1,2,3。 这其中开始、中间、结束都有状态变化,这时候做好状态以及doc的控制。
做好以上三步差不多就出来这个效果,后期就是一些微调,比如动画时间快慢等细节的控制;