摘要:最近想自己写下轮播图,在网上发现一个网友用属性实现的轮播,赶脚超简单哦,自己学习了后整理如下。如果我们用给加上类,的就要变成对吧,由于有属性,所以要等,才能完全变为,实现了淡入。
最近想自己写下轮播图,在网上发现一个网友用CSS transition属性实现的轮播,赶脚超简单哦,自己学习了后整理如下。(找不到原网址了-.-...就不贴了...)
(如果不了解transition,先去这里(点我,点我)学习下)
思路
图片淡入淡出效果是不透明度(CSS opacity属性)的变换过程。举例,让图片淡出,就是图片的opacity属性在一段时间内逐渐从1变为0,淡入呢,则是图片的opacity属性在一段时间内逐渐从0变为1,用transition可以轻松实现啊。
我们设置图片的CSS样式如下,先不考虑布局和宽高这些。
img{ opacity: 0; transition: opacity 1s; } img.active{ opacity: 1; }
这段CSS能实现什么呢?
一开始,img的opacity为0,所以我们看不见。如果我们用JS给img加上active类,img的opacity就要变成1对吧,由于有transition属性,所以要等1s,opacity才能完全变为1,实现了淡入。
那淡出呢?你想下,等img淡入完了之后,我又用JS删掉img的active类会怎么样?这时候img的opacity应该从1变为0对吧,又由于有transition属性,所以opacity要等1s才能变为0,这就实现了淡出。
JS的setInterval(code,millisec)(点我学习该函数)可以每隔一段时间就执行指定代码。如果我每隔1s就更改下img的类名,如果有active类就删掉,如果没有就加上,这样图片就不断地淡入 → 淡出 → 淡入 → 淡出。
怎么实现多张图片轮流淡入淡出呢?
你每次删掉当前图片的active类(淡出),然后给下一张图片加上active类(淡入),这样就实现了图片的切换。
剩下的就是每隔固定时间间隔,执行切换图片函数就行了。
先上两个效果图。
点我跳转CodePen看本文代码最终效果,打开可能有点慢,耐心等等。这个是图片自动轮播,也可以通过图片底部的页码选择图片。
点我跳转看稍微变动后的另一种效果(这是仿的京东首页轮播图效果,鼠标滑到图片上时会显示左右按钮框,点击左右按钮框也可实现图片切换。)
只有图片的轮播
HTML比较简单,就是一个
CSS如下。设置好
*{ padding: 0; margin: 0; } #slideshow{ width: 800px; height: 350px; margin: 0 auto; /*设置在页面水平居中*/ overflow: hidden; position: relative; } #slideshow img{ width: 800px; position: absolute; /*图片采取绝对定位,均位于左上角,重叠在一起*/ top: 0; left: 0; opacity: 0; /*初始不透明度为0,图片都看不见*/ transition: opacity 1s linear; /*--重点--定义一个关于透明度的transition*/ } #slideshow img.active{ opacity: 1; /*有active类的图片不透明度为1,即显示图片*/ }
JS如下。在轮播函数slideshow()里,定义了图片淡出函数slideOff(),图片淡入函数slideOn()和切换图片函数changeSlide()。
//---------主角:轮播图函数------------- function slideshow() { var slideshow=document.getElementById("slideshow"), imgs=slideshow.getElementsByTagName("img"), //得到图片们 current=0; //current为当前活跃的图片编号 function slideOff() { imgs[current].className=""; //图片淡出 } function slideOn() { imgs[current].className="active"; //图片淡入 } function changeSlide() { //切换图片的函数 slideOff(); //图片淡出 current++; //自增1 if(current>=3) current=0; slideOn(); //图片淡入 } //每2s调用changeSlide函数进行图片轮播 var slideon=setInterval(changeSlide,2000); } slideshow();
这里有个问题哦,轮播图一般鼠标移入图片后,轮播就停止了,当鼠标移出后,轮播又开始对吧。我们用JS的onmouseover和onmouseout来实现。
在JS的slideshow()函数中加入以下代码即可。
slideshow.onmouseover=function () { clearInterval(slideon); //当鼠标移入时清除轮播事件 } slideshow.onmouseout=function () { slideon=setInterval(changeSlide,2000); //当鼠标移出时重新开始轮播事件 }
具体效果见CodePen链接。
加上页码恩,然后我们加上和每张图片相对应的页码,并实现鼠标移上去就会显示相应图片这个功能。
在HTML的
1 2 3
第一个我也是已经添加了active类。
然后设置页码的样式,让它们位于图片的底部,一字排开。
/* 设置页码的样式 */ #slideshow div{ width: 100%; position: absolute; bottom: 10px; text-align: center; } #slideshow span{ display: inline-block; width: 25px; line-height: 25px; /*当只有一行文本时height等于line-height*/ border-radius: 25px; /*设置页码为圆形*/ margin: 0 15px; background: white; font-size: 16px; } #slideshow span.active{ color: white; background: #FFDD55; }
在JS中,slideOff()和slideOn()函数都要更新下,因为淡入淡出时的类名也要进行变更。
function slideOff() { imgs[current].className=""; //图片淡出 pages[current].className=""; } function slideOn() { imgs[current].className="active"; //图片淡入 pages[current].className="active"; }
再就是鼠标移入时,需要显示对应的图片对吧。我们先把当前图片淡出,然后得到当前对应的current,再让图片淡入就好啦。
for(var i=0; i<pages.length; i++)="" {="" 定义鼠标移入和移出页码事件="" pages[i].onmouseover="function(){" slideoff();="" 图片淡出="" current="this.innerHTML-1;" 得到鼠标停留的页码对应的current="" slideon();="" }="" }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/115351.html
摘要:首先,巧妙的使用这一标记,将游览器从所有情况中分离出来。元素不能用作语义用途以外的其他目的。空白段落元素并非用于跳行。当浏览器支持时,它们会自动地呈现出来并发挥作用。Html1、Html5有哪些新特性,移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区别HTML和HTML5?HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。拖拽释放(D...
摘要:网上的淡入淡出效果大多是依照中和的方法使用来控制元素的透明度达到目的,但缺点是有轻微的卡顿感,并且运行效率一般。思路是将淡入,淡出的效果做成预先定义好的样式类,然后用改变元素的类来达到图片轮播。 网上的淡入淡出效果大多是依照jquery中fadeIn和fadeOut的方法使用js来控制元素的透明度达到目的,但缺点是有轻微的卡顿感,并且运行效率一般。 这里提供另外一个思路,即通过预先定义...
摘要:起因现在自学前端中,学到移动端,在做一个项目,课程开始用原生的方法写轮播图无缝,但是视频讲的是面向过程的方式,现在自己用面向对象的方式写一下。 ## 起因 ## 现在自学前端中,学到移动端,在做一个项目,课程开始用原生的方法写轮播图(无缝),但是视频讲的是面向过程的方式,现在自己用面向对象的方式写一下。 ## 上代码 ## html的代码 分类 ...
阅读 1072·2021-11-15 18:00
阅读 2780·2021-09-22 15:18
阅读 1943·2021-09-04 16:45
阅读 732·2019-08-30 15:55
阅读 3800·2019-08-30 13:10
阅读 1308·2019-08-30 11:06
阅读 1943·2019-08-29 12:51
阅读 2277·2019-08-26 13:55