JS 轮播图

写在前面

最聪明的人是最不愿浪费时间的人。——但丁

实现功能

  • 图片自动切换
  • 鼠标移入停止自动播放,显示按钮
  • 点击按钮,实现前后翻
  • 鼠标移入小圆圈,可以跳转到对应图片
  • 点击左右两侧图片部分区域可以前后前后翻

实现原理

  • 把图片叠在一起,左右两边各移出一张图片,其他的图片就叠在中间图片的下方
  • 通过改变左中右图片的类名,来实现切换图片的效果

假设我要播放下一张图片,就把浅绿色图片的类名给到绿色图片,这样绿色图片就能到浅绿色的位置,同理把绿色图片的类名给黄色,把黄色的类名给下一个

实现效果

由于上传图片大小限制,只截了一小段

几个重要函数的解释

  • 翻页函数
var j = 1;
var num = ['one','two','three','four','five','six'];
rightb.addEventListener('click',rightf);
function rightf(){//把数组的最后一个添加到第一个num.unshift(num[5]);//删除最后一个num.pop();//重新给li添加类名for(var i = 0;i < num.length;i++){imgt[i].setAttribute('class',num[i]);}//通过这个全局变量来让小圆圈的颜色一起变化j++;colort();
}function colort (){for(var i = 0 ; i < list.children.length ; i++){list.children[i].className = '';}if(j >= 6){j = 0;}else if (j < 0 ){j = 5;}list.children[j].className = 'change';}

左右翻页思路相同,拿一个来讲

首先定义了一个全局变量 'j’来控制小圆圈的同时移动

把6张图片的类名存在数组当中,这样可以通过修改数组,来修改图片对应的类名,左移时就是右边的图片变成中间,中间图片到左边,第四张图片到右边

可以通过下图的变化来实现,把最后一个类名放到第一个来,也就是先把数组的最后一个元素复制到最前面,再删除最后一个元素,这样数组就改变成功了,再把这个数组依次赋值给图片,这样图片的切换效果就完成了

简易思路

有个数组是[1,2,3,4,5,6]

值为2的对应的样式是中间的图片

值为1的样式是左侧图片

值为3的样式是右侧图片

然后现在要实现左移,数组就变成[6,1,2,3,4,5]

这样中间的图片就变成了下一张,其他的也对应发生变化

小圆圈

全局变量 j 来记录当前是第几张图片,再把第j个小圆圈更改样式就好了

这里应用了排他思想,先把所有的小圆圈取消样式,再给特定圆圈添加样式

经过小圆圈切换对应图片
    function jump(){//鼠标经过的小圆圈索引号是多少var index = this.getAttribute('index');//确定当前中间的图片在什么位置,索引号是多少var now = num.indexOf('two');//计算经过点与当前点的距离,两个索引号的差值var dif = Math.max(index,now) - Math.min(index,now);/* 如果经过的小圆圈索引号大于当前索引号,就是相当与点击了右按钮,差多少,相当于点了几次*/if(index > now){while(dif--){rightf();}}else {while(dif--){leftf();}}}

注释超详细

完整代码

HTML部分

<!DOCTYPE html>
<html lang="chn">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="wyy.css"><script src="wyy.js"></script>
</head>
<body><!-- 大盒子 --><div class="box"><!-- 左侧按钮 --><a href="javascript:;" class="left">&lt</a><!-- 右侧按钮 --><a href="javascript:;" class="right">&gt</a><!-- 轮播图片 --><ul class="imgs" > <li class="one"><a href="#"><img src="wyyimg/1.jpg" alt=""></a></li><li class="two"><a href="#" ><img src="wyyimg/2.jpg" alt=""></a></li><li class="three"><a href="#"><img src="wyyimg/3.jpg" alt=""></a></li><li class="four"><a href="#"><img src="wyyimg/4.jpg" alt="" class="rose"></a></li><li class="five"><a href="#"><img src="wyyimg/5.jpg" alt=""></a></li><li class="six"><a href="#"><img src="wyyimg/6.jpg" alt=""></a></li></ul>
//小圆圈<ul class="list"></ul>
//两个空盒子,实现左右两侧图片点击效果<div class="rights"></div><div class="lefts"></div></div>
</body>
</html>

CSS部分

/* 一些简单的初始化文件 */
* {margin: 0;padding: 0;
}
a {text-decoration: none;
}
li {list-style-type: none;
}
/* 更改图片的大小 */
img {width: 100%;border-radius: 20px;box-shadow: 5px 5px 5px rgba(0,0,0,0.2);
}
/* 确定盒子的大小 */
.box {position: relative;width: 958px;height: 284px;/* 居中 */top: 0;left: 50%;transform: translate(-50%,50%);
}
.imgs {position: absolute;width: 730px;height: 284px;top: 0;left: 50%;transform: translate(-50%,0%);
}
/* 让图片都叠在一起 */
.imgs li {position: absolute;width: 730px;transition: 0.5s;
}
/* 给左右按钮设计样式,和定位 */
.box .left {position: absolute;font-size: 24px;color: white;width: 36px;height: 36px;line-height: 36px;text-align: center;background-color: black;border-radius: 18px;/* 添加半透明 */opacity: .3;top: 50%;left: 0;z-index: 999;
}
.box .right {position: absolute;font-size: 24px;color: white;width: 36px;height: 36px;line-height: 36px;text-align: center;background-color: black;border-radius: 18px;/* 添加半透明 */opacity: .3;top: 50%;right: 0;z-index: 999;
}
/* 给左右按钮添加鼠标移入样式 */
.left:hover {/* 把透明度挑高一点,让按钮看起来更亮一些 */opacity: .7;
}
.right:hover {opacity: .7;
}
/* 把图片错开 */
.imgs .one {transform: translateX(-150px) scale(0.9);z-index: 1;
}
/* 第二张图片在中间,层级最高 */
.imgs .two {z-index: 2;
}
.imgs .three {transform: translateX(150px) scale(0.9);z-index: 1;
}
/* 刚开始不显示的图片就放在中间图片的下面 */
.imgs .four {transform: scale(0.9);
}
.imgs .five {transform: scale(0.9);
}
.imgs .six {transform: scale(0.9);
}
/* 设计小圆圈 */
/* 定位 */
.list {position: absolute;bottom: -25px;left: 50%;margin-left: -81px ;z-index: 777;
}
/* 设计样式 */
.list li {float: left;width: 15px;height: 15px;background-color: rgb(230, 230, 230);border-radius: 50%;margin: 0 6px;cursor: pointer;
}
/* 小圆圈改变后的样式 */
.list .change {background-color: rgb(236, 65, 65);
}
/* 左右两边各一个盒子 */
.rights{position: absolute;right: 0;bottom: 30px;height: 255.5px;width: 100px;
}
.lefts{position: absolute;left: 0;bottom: 14px;height: 255.5px;width: 100px;
}

JS部分

window.addEventListener('load',function(){//获取元素var leftb = document.querySelector('.left');var rightb = document.querySelector('.right');var box = document.querySelector('.box');var imgs = box.querySelector('.imgs');   var imgt = imgs.querySelectorAll('li');//自动翻页函数var timeone = setInterval(function(){rightf();},1000);//左右按钮的出现box.addEventListener('mouseover',function(){leftb.style.display = 'block';rightb.style.display = 'block';//移入时清除定时器clearInterval(timeone);timeone = null;       })//左右按钮的消失box.addEventListener('mouseout',function(){leftb.style.display = 'none';rightb.style.display = 'none';//恢复定时器clearInterval(timeone);timeone = setInterval(function(){rightf();},1000)})//动态生成小圆圈,小圈圈模块var list = box.querySelector('.list');for(var i = 0;i < imgs.children.length;i++){//创建li,加入ul中var li =document.createElement('li');list.appendChild(li);//给小圈圈添加类名li.setAttribute('index',i);//排他思想,实现点击小圆圈,变色li.addEventListener('click',colors);//经过小圆圈,切换图片li.addEventListener('mouseenter',jump);}//一开始第二个亮list.children[1].className = 'change';//变色函数 function colors(){//把所有的小圆圈变白for(var i = 0 ; i < list.children.length ; i++){list.children[i].className = '';}//给图片对应的小圆圈上色var index = this.getAttribute('index');list.children[index].className = 'change';} //跳转函数function jump(){var index = this.getAttribute('index');var now = num.indexOf('two');//计算经过点与当前点的距离var dif = Math.max(index,now) - Math.min(index,now);// console.log(dis);if(index > now){while(dif--){rightf();}}else {while(dif--){leftf();}}}//小圆圈跟随着图片移动var j = 1;function colort (){for(var i = 0 ; i < list.children.length ; i++){list.children[i].className = '';}if(j >= 6){j = 0;}else if (j < 0 ){j = 5;}list.children[j].className = 'change';}//翻页模块var num = ['one','two','three','four','five','six'];//右翻页rightb.addEventListener('click',rightf);function rightf(){//把数组的最后一个添加到第一个num.unshift(num[5]);//删除最后一个num.pop();//重新给li添加类名for(var i = 0;i < num.length;i++){imgt[i].setAttribute('class',num[i]);}//通过这个全局变量来让小圆圈的颜色一起变化j++;colort();}//左翻页leftb.addEventListener('click',leftf)function leftf(){num.push(num[0]);num.shift();for(var i = 0;i < num.length;i++){imgt[i].setAttribute('class',num[i]);}j--;colort();}//点击图片实现翻页,这里我是通过在左右两边添加一个盒子来实现的var rights = document.querySelector('.rights');rights.addEventListener('click',function(){rightf();})var lefts = document.querySelector('.lefts');lefts.addEventListener('click',function(){leftf();})
})

以上就是网易云轮播图的全部代码以及解释

如果有什么缺漏错误的地方,欢迎各位大佬指出。

需要代码文件的可以留言

时间,就象海棉里的水,只要愿挤,总还是有的。——[鲁迅]


JS轮播图(网易云轮播图)相关推荐

  1. 原生JS实现小米轮播图和网易云轮播图

    文章目录 小米轮播图 网易云轮播图 小米轮播图 实现功能: 定时切换(2s) 点击按钮停止切换 点击向左向右按钮进行相应切换 鼠标点击下方的小圆点,并进行相应的切换 效果: 代码如下: <!DO ...

  2. 使用JS+CSS的网易云轮播图的实现(完整代码)

    一个网易云轮播图的实现 <!DOCTYPE html> <html lang="chn"> <head><meta charset=&qu ...

  3. 原生H5实现网易云轮播图

    许久不更新了,今天做一个网易云的轮播图,就像下面这样 先二话不多说,贴上代码: <!DOCTYPE html> <html lang="en"> <h ...

  4. 使用HTML+CSS制作网易云轮播

    使用HTML和CSS制作网易云轮播 今天现来说说使用CSS的动画技术来实现轮播.现看看效果图         这里是八张图片渐入渐出的效果轮播. html代码: <!DOCTYPE html&g ...

  5. Python之手把手教你用JS逆向爬取网易云40万+评论并用stylecloud炫酷词云进行情感分析

    本文借鉴了@平胸小仙女的知乎回复 https://www.zhihu.com/question/36081767 写在前面: 文章有点长,操作有点复杂,需要代码的直接去文末即可.想要学习的需要有点耐心 ...

  6. Python爬虫——教你js逆向爬取网易云评论

    大家好!我是霖hero 正所谓条条道路通罗马,上次我们使用了Selenium自动化工具来爬取网易云的音乐评论,Selenium自动化工具可以驱动浏览器执行特定的动作,获得浏览器当前呈现的页面的源代码, ...

  7. 破解网易云js加密,爬虫获取网易云评论

    破解网易云js加密,爬虫获取网易云评论 抓包 这里是对网页版的网易云音乐进行抓包,分析网络请求,url https://music.163.com/#/song?id=36229055 然后可以发现 ...

  8. 记录下如何用vue实现PC端网易云轮播图效果

    记录下自己写仿网易云音乐手写的轮播图,效果如图 简单来说,这个轮播图原理是用css定位把所有图片叠再一起,显示前3张图片,第2张图片层里设置层级为最高,1,3俩张图片层级比2层级低,比其他图片高就行. ...

  9. 计算机毕业设计Node.js+Vue安卓仿网易云音乐客户端APP(程序+源码+LW+部署)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程.欢迎交流 项目运行 环境配置: Node.js+ Vscode + Mysql5.7 + HBuilderX+Navicat11+Vue ...

最新文章

  1. php 派生类 数据库连接 单例模式 xhprof实测 高效连接
  2. Redis Key资源占用情况的可视化分析
  3. 《Splunk智能运维实战》——3.11 制作折线图显示项目浏览量和购买量随时间的变化...
  4. 【InfoQ大咖说直播回放】老司机聊程序员的职场道路选择
  5. SQL Server--用户自定义函数
  6. 温故知新,.Net Core遇见WinForms客户端窗体框架,在DotNet Core大一统基础上老树发芽...
  7. Android 那些年,处理getActivity()为null的日子
  8. codeigniter:去掉 URL 中的 index.php
  9. oracle:用户购买平台案例分析与优化
  10. Maven 手动安装JAR包到本地maven仓库后,但在项目中依旧报错找不到JAR包解决方法
  11. 奋斗的小孩系列 FPGA学习altera系列: 第三篇 快速选择目标器件
  12. 基于云计算运维毕业设计与制作
  13. [快速学会Swift第三方库] SwiftyJSON篇
  14. 白色用rgba怎么设置html,在白色上将RGB转换为RGBA
  15. 蚂蚁区块链第15课 JS SDK概述及API接口速查
  16. java石头剪刀布界面_利用Java模拟石头剪刀布游戏
  17. I2C总线的SDA和SCL
  18. 30天30队:2013-14季,俄克拉荷马州雷霆
  19. IDEA启动main函数时,Command line is too long Shorten command line for XXX or also问题解决
  20. C#+AE调用ArcToolbox工具

热门文章

  1. websocket封装,有心跳和断开重联功能
  2. 信创操作系统--统信UOS桌面版(登录与激活统信:直接登录、远程登录、锁屏、电源管理、激活)
  3. Apache ServiceComb社区常见问题解答问答精选(第一期)
  4. python 升级setuptools_python3.6升级及setuptools、pip安装
  5. PyQT从入门到出门-001
  6. 原生JS实现的滚动抽奖工具(可设置每个奖品概率、滚动速度、滚动圈数)
  7. python联网斗地主_Python斗地主
  8. 用JQuery写一个斗地主发牌器
  9. 学习 FPGA 经验与书籍分享。
  10. 个人博客项目(2) --- 用户登录