HTML代码

<div class="box"><!-- ul就相当于我装图片的盒子 --><ul class="box_ul"><li class="box_li"><img src="data:images/messi3.jpg" alt=""></li><li class="box_li"><img src="data:images/messi1.jpg" alt=""></li><li class="box_li"><img src="data:images/messi2.jpg" alt=""></li><li class="box_li"><img src="data:images/messi3.jpg" alt=""></li><li class="box_li"><img src="data:images/messi1.jpg" alt=""></li></ul><!-- 左右两边按钮 --><div class="left"><a href="#"><span>< </span></a></div><div class="right"><a href="#"><span>> </span></a></div><!-- 小圆点 --><ul class="yuandian"><li class="point current"></li><li class="point"></li><li class="point"></li></ul></div>

CSS代码

<style>* {margin: 0;padding: 0;}a {text-decoration: none;}li {list-style: none;}.box {position: relative;width: 800px;height: 400px;margin: 0 auto;overflow: hidden;}.box_ul {position: absolute;top: 0px;left: -800px;width: 4000px;height: 400px;transform: translateX(0px);}.box_ul img {width: 800px;height: 400px;}.box_ul .box_li {float: left;}/* 左边箭头的样式 */.box .left {width: 60px;height: 100px;background-color: grey;position: absolute;top: 50%;margin-top: -50px;left: 1px;text-align: center;line-height: 100px;}.box .right {width: 60px;height: 100px;background-color: grey;position: absolute;top: 50%;margin-top: -50px;left: 741px;text-align: center;line-height: 100px;}.box a {display: inline-block;width: 60px;height: 100px;}/* 小圆点样式 */.yuandian {width: 60px;height: 16px;position: absolute;top: 375px;left: 50%;margin-left: -30px;}.yuandian li {width: 10px;height: 10px;border-radius: 50%;border-style: solid;border-width: 2px;border-color: slategray;float: left;margin-right: 5px;}.current {background-color: white;}</style>

JS代码

<script>//获取元素var yuandian = document.querySelector('.yuandian')//装小圆点的盒子var point = document.querySelectorAll('.point');//小圆点var boxLi = document.querySelectorAll('.box_li');//图片var boxUl = document.querySelector('.box_ul');//装图片的盒子var right = document.querySelector('.right');//右边按钮var left = document.querySelector('.left');//左边按钮var num = 0;//num记录我点击按钮的次数var circle = 0;//circle来记录小圆点的位置//让所有的小圆点都添加上点击事件for (var i = 0; i < point.length; i++) {//自定义属性point[i].setAttribute('index', i);//给小圆点添加上点击事件point[i].onclick = function () {//使用排它思想//第一步:干掉所有人for (var i = 0; i < point.length; i++) {point[i].className = 'point';}this.className = 'point current';var index = this.getAttribute('index');//将小圆点的自定义属性值传给numnum = index;//将小圆点的自定义属性传给circlecircle = index;//算法:自定义属性的值 * -盒子的宽度//'translateX(index*-800px)';boxUl.style.transform = 'translateX(' + index * -800 + 'px)';}}//右边按钮点击事件right.onclick = function () {//为什么要num++,因为num 进来的时候是0,如果是0第一次点击按钮的时候,位置不会动,所以需要++num++;boxUl.style.transition = 'transform 0.5s linear 0s';boxUl.style.transform = 'translateX(' + num * -800 + 'px)';//需要使用到无缝滚动技术(轮播图)if (num == boxLi.length - 2) {num = 0;setTimeout(() => {boxUl.style.transform = 'translateX(' + num * -800 + 'px)';boxUl.style.transition = 'none';}, 500);//时间需要跟过渡的时间匹配}//小圆点跟随我点击右边按钮的位置进行变化circle++;if (circle == boxLi.length - 2) {circle = 0;}//小圆点跟随排他思想for (var i = 0; i < point.length; i++) {point[i].className = 'point';}point[circle].className = 'point current';}//左边按钮点击事件left.onclick = function () {boxUl.style.transition = 'transform 0.5s linear 0s';if (num == 0) {num++;boxUl.style.transform = 'translateX(' + num * 800 + 'px)';setTimeout(() => {//为什么要-3,因为多加了一张图,length变成5num = boxLi.length - 3;boxUl.style.transition = 'none';boxUl.style.transform = 'translateX(' + -num * 800 + 'px)';}, 500);//时间需要跟过渡的时间匹配} else {num--;boxUl.style.transform = 'translateX(' + -num * 800 + 'px)';}//小圆点跟随我点击左边按钮的位置进行变化if (circle == 0) {circle = boxLi.length - 2;}circle--;//小圆点跟随排他思想for (var i = 0; i < point.length; i++) {point[i].className = 'point';}point[circle].className = 'point current';}//自动播放轮播图//鼠标移入事件boxUl.onmouseover = function () {//暂停定时器clearInterval(timer);timer = null;}right.onmouseover = function () {//暂停定时器clearInterval(timer);timer = null;}left.onmouseover = function () {//暂停定时器clearInterval(timer);timer = null;}yuandian.onmouseover = function () {//暂停定时器clearInterval(timer);timer = null;}//鼠标移出事件boxUl.onmouseout = function () {//开始定时器timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次}right.onmouseout = function () {//开始定时器timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次}left.onmouseout = function () {//开始定时器timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次}yuandian.onmouseout = function () {//开始定时器timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次}//使用定时器自动播放(setInterval())var timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次
</script>

最后源码附上

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS+CSS+HTML实现轮播图案例</title><style>* {margin: 0;padding: 0;}a {text-decoration: none;}li {list-style: none;}.box {position: relative;width: 800px;height: 400px;margin: 0 auto;overflow: hidden;}.box_ul {position: absolute;top: 0px;left: -800px;width: 4000px;height: 400px;transform: translateX(0px);}.box_ul img {width: 800px;height: 400px;}.box_ul .box_li {float: left;}/* 左边箭头的样式 */.box .left {width: 60px;height: 100px;background-color: grey;position: absolute;top: 50%;margin-top: -50px;left: 1px;text-align: center;line-height: 100px;}.box .right {width: 60px;height: 100px;background-color: grey;position: absolute;top: 50%;margin-top: -50px;left: 741px;text-align: center;line-height: 100px;}.box a {display: inline-block;width: 60px;height: 100px;}/* 小圆点样式 */.yuandian {width: 60px;height: 16px;position: absolute;top: 375px;left: 50%;margin-left: -30px;}.yuandian li {width: 10px;height: 10px;border-radius: 50%;border-style: solid;border-width: 2px;border-color: slategray;float: left;margin-right: 5px;}.current {background-color: white;}</style>
</head><body><div class="box"><!-- ul就相当于我装图片的盒子 --><ul class="box_ul"><li class="box_li"><img src="data:images/messi3.jpg" alt=""></li><li class="box_li"><img src="data:images/messi1.jpg" alt=""></li><li class="box_li"><img src="data:images/messi2.jpg" alt=""></li><li class="box_li"><img src="data:images/messi3.jpg" alt=""></li><li class="box_li"><img src="data:images/messi1.jpg" alt=""></li></ul><!-- 左右两边按钮 --><div class="left"><a href="#"><span>< </span></a></div><div class="right"><a href="#"><span>> </span></a></div><!-- 小圆点 --><ul class="yuandian"><li class="point current"></li><li class="point"></li><li class="point"></li></ul></div>
</body></html>
<script>//获取元素var yuandian = document.querySelector('.yuandian')//装小圆点的盒子var point = document.querySelectorAll('.point');//小圆点var boxLi = document.querySelectorAll('.box_li');//图片var boxUl = document.querySelector('.box_ul');//装图片的盒子var right = document.querySelector('.right');//右边按钮var left = document.querySelector('.left');//左边按钮var num = 0;//num记录我点击按钮的次数var circle = 0;//circle来记录小圆点的位置//让所有的小圆点都添加上点击事件for (var i = 0; i < point.length; i++) {//自定义属性point[i].setAttribute('index', i);//给小圆点添加上点击事件point[i].onclick = function () {//使用排它思想//第一步:干掉所有人for (var i = 0; i < point.length; i++) {point[i].className = 'point';}this.className = 'point current';var index = this.getAttribute('index');//将小圆点的自定义属性值传给numnum = index;//将小圆点的自定义属性传给circlecircle = index;//算法:自定义属性的值 * -盒子的宽度//'translateX(index*-800px)';boxUl.style.transform = 'translateX(' + index * -800 + 'px)';}}//右边按钮点击事件right.onclick = function () {//为什么要num++,因为num 进来的时候是0,如果是0第一次点击按钮的时候,位置不会动,所以需要++num++;boxUl.style.transition = 'transform 0.5s linear 0s';boxUl.style.transform = 'translateX(' + num * -800 + 'px)';//需要使用到无缝滚动技术(轮播图)if (num == boxLi.length - 2) {num = 0;setTimeout(() => {boxUl.style.transform = 'translateX(' + num * -800 + 'px)';boxUl.style.transition = 'none';}, 500);//时间需要跟过渡的时间匹配}//小圆点跟随我点击右边按钮的位置进行变化circle++;if (circle == boxLi.length - 2) {circle = 0;}//小圆点跟随排他思想for (var i = 0; i < point.length; i++) {point[i].className = 'point';}point[circle].className = 'point current';}//左边按钮点击事件left.onclick = function () {boxUl.style.transition = 'transform 0.5s linear 0s';if (num == 0) {num++;boxUl.style.transform = 'translateX(' + num * 800 + 'px)';setTimeout(() => {//为什么要-3,因为多加了一张图,length变成5num = boxLi.length - 3;boxUl.style.transition = 'none';boxUl.style.transform = 'translateX(' + -num * 800 + 'px)';}, 500);//时间需要跟过渡的时间匹配} else {num--;boxUl.style.transform = 'translateX(' + -num * 800 + 'px)';}//小圆点跟随我点击左边按钮的位置进行变化if (circle == 0) {circle = boxLi.length - 2;}circle--;//小圆点跟随排他思想for (var i = 0; i < point.length; i++) {point[i].className = 'point';}point[circle].className = 'point current';}//自动播放轮播图//鼠标移入事件boxUl.onmouseover = function () {//暂停定时器clearInterval(timer);timer = null;}right.onmouseover = function () {//暂停定时器clearInterval(timer);timer = null;}left.onmouseover = function () {//暂停定时器clearInterval(timer);timer = null;}yuandian.onmouseover = function () {//暂停定时器clearInterval(timer);timer = null;}//鼠标移出事件boxUl.onmouseout = function () {//开始定时器timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次}right.onmouseout = function () {//开始定时器timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次}left.onmouseout = function () {//开始定时器timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次}yuandian.onmouseout = function () {//开始定时器timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次}//使用定时器自动播放(setInterval())var timer = setInterval(function () {//手动调用点击事件right.onclick();}, 2000);//2000代表2秒钟点击一次
</script>

图片可以用背景颜色替代


JS无缝轮播图(支持点击左右切换,小圆点切换,定时器自动播放)相关推荐

  1. 原生JS无缝轮播图(左右切换、导航跟随)

    原生JS无缝轮播图(左右切换.导航图标) 功能: 1.实现轮播图的左右无缝切换 2.实现导航图标的跟随显示.点击切换 3.使用定时器进行无缝轮播 css部分 <style>/* 轮播图容器 ...

  2. 例子---JS无缝轮播图

    DuangDuang,今天我们来一起说说JS实现无缝轮播.没错,顾名思义,就是我们脑子中浮现的类似淘宝主页面中间部分的那个滚动图.这个轮播图的使用频率还是很大的,所以还是很有必要好好研究一下的. 哈哈 ...

  3. js轮播图片小圆点变化_纯js实现轮播图,详解(简单,无缝,小圆点,左右手动切换,自动轮动)...

    无论用什么语言开发可视化界面,都有一个叫轮播图的东西.我们现在有个需求,如图: slideshow1.PNG 左右切换按钮默认为隐藏,当鼠标进入图片时,左右切换按钮时显示的,当鼠标离开图片时左右切换按 ...

  4. javaScript小案例------js实现无缝轮播图效果篇

    原生js书写无缝轮播图 javaScript无缝轮播图思路及源码 无缝轮播图效果 总体思路 下面附上代码: html css animate.js index.js javaScript无缝轮播图思路 ...

  5. JS实现轮播图点击切换、按钮切换功能

    JS实现轮播图点击切换.按钮切换功能 前言 轮播图案例 总结 前言 轮播图的案例非常经典,写法也非常多,我在写一个自己用的比较多的写法,帮助大家理解,在网页的设计中,可以直接拿去用(记得换图片路径哦! ...

  6. 左右无缝轮播html,JS实现左右无缝轮播图代码

    废话不多说了,直接给大家贴代码了. 无缝轮播图: 无缝轮播图 *{margin: 0;padding:0; } ul{list-style: none;} .banner{width: 600px;h ...

  7. js实现轮播图(点击小图片切换大图片+自动切换)

    js实现轮播图(点击小图片切换大图片+自动切换) 实现效果如下: 点击小图切换大图和轮播标题,点击左右按钮大小图和轮播标题切换,鼠标进入清除定时器,鼠标移出恢复轮播 html代码如下: <div ...

  8. 使用原生js将轮播图组件化

    代码地址如下: http://www.demodashi.com/demo/11316.html   这是一个轮播图组件,这里是代码地址,需要传入容器的id和图片地址,支持Internet Explo ...

  9. 轮播图 (无缝轮播图)

    1.无缝轮播核心: 在最后多加一张第一张图, 当达到最后一张t1的时候 一瞬间将ul拉回到0的位置 结构: <div class="wrap"><ul>&l ...

最新文章

  1. 引用-ZIGBEE-ZSTACK网络配置相关问题
  2. [MetalKit]2-Using-MetalKit-part-1使用MetalKit1
  3. 子菜单挤压下方块元素_小心上瘾!全新类型的消除游戏|《土耳其方块》
  4. This will have no impact if delete.topic.enable is not set to true以及删除kafka中的topic
  5. .NET 6 新特性 Parallel ForEachAsync
  6. 【MaxCompute学习】隐式转化的问题
  7. docker前后端分离_Docker分离模式介绍
  8. 在线JSON转flow工具
  9. Atitit 软件与开发的未来趋势 attilax总结 1.1. Sdx软件重构世界 软件定义未来 1 1.2. 《软件和信息技术服务业发展规划(2016-2020年)》( 2 1.3. Iot物联
  10. VMware Workstation 激活密码
  11. 关于金融学和计量金融学的好书
  12. 工业App能否成为继Android和iOS后下一个App开发者的春天?
  13. 【北邮国院大三上】电子商务法(e-commerce law)知识点整理——Banking Lawe-Payment
  14. 在360新员工入职培训上的讲话
  15. cadence 17.2 入门学习3 allegro
  16. mac 上双击终端执行sh文件
  17. 宁波区块链联盟正式成立 inTouch社交能否成为区块链领域的又一匹黑马?
  18. 安装多个jdk版本并切换
  19. 微型计算机技术及应用考题,2017年计算机应用试题及答案
  20. 电脑突然无法识别无线网络

热门文章

  1. 通过多线程为基于 .NET 的应用程序实现响应迅速的用户(MSDN)
  2. 剑指offer- 顺时针打印矩阵 精品算法
  3. mac提示Insecure world writable解决
  4. 取证APP在杭州发布 将区块链、电子签名、电子数据鉴定等技术运用于取证全过程
  5. nohup 后台运行
  6. bootstrap 合并单元格之mergeCells属性合并
  7. creator发布oppo小游戏
  8. 通过腾讯云的文字识别进行图文转换【java】
  9. 工程学导论——工程、技术与工程师
  10. Java版本的DLX解决数独算法