效果一:

会自动进行轮播,当鼠标进入轮播图区域会停止轮播,点击左右箭头可以向前、向后进行切换图片

效果二:

这种效果比第一种效果简单,只要删除一些代码和修改一些样式即可。

实现原理

轮播图整体是放在ul里的,li里存放img图片(轮播的图片)

<ul><li><img></li>
</ul>

给li元素进行绝对定位,且给每个li一个z-index值(堆叠数值,可以理解为z轴,数值越大,这个元素就会叠在数值小的元素上面,比如图片1的z-index大于图片2的,图片1就会显示,图片2会在图片1下面不显示,我们可以利用这点进行图片的轮换)。

然后我们把li元素放到一个arr数组中,并开始给每个li设置z-index,在arr数组中,位置越靠后(下标越大)的li,它的z-index越大,然后我们进行轮播,把arr数组中最后一个li换到数组前面,然后其他元素就挤上前,这样来,每个li都会有机会到arr数组的尾部,即z-index最大的地方,所以图片就会轮换。

代码部分

1.先设置整体样式。

<style>body {background-color: rgb(119, 115, 110);}ul {height: 200px;width: 800px;padding: 0;position: absolute;/* 水平居中 */left: 50%;margin-left: -400px;/* 垂直居中 */top: 50%;margin-top: -100px;list-style: none;}/* 移入到轮播图区域把鼠标形状变成‘手’ */ul:hover {cursor: pointer;}li {position: absolute;left: 0;/* 过渡属性,让轮播图切换更自然 */transition: 0.4s;}</style>

2.然后只在body里只写一个ul,li 和 img 都直接在js中循环创建

<body><ul id="banner"></ul>
</body>

3.JS代码部分,获取ul 然后循环创建li 和 img

//1.获取ul
var cur_ul = document.getElementById('banner')
// 2.创建一个数组实例
var arr = new Array();// 用js来创建li、img元素,有多少张图片要轮播就循环多少次
for (i = 1; i <= 5; i++) {// 创建li元素var cur_li = document.createElement('li')// 创建img元素var cur_img = document.createElement('img')// 给img元素设置src、width、height属性// 这里src是轮播图的路径// 在img文件夹下的图片命名为1.jpg、2.jpg、3.jpg....才可以这样写cur_img.src = 'img/' + i + '.jpg';cur_img.style.width = '400px';cur_img.style.height = '200px';// 把img元素插入到创建的li里面cur_li.appendChild(cur_img);// 然后在把li插入到ul里面cur_ul.appendChild(cur_li);// 然后给ul元素设置事件,鼠标移进来停止轮播cur_ul.onmouseenter = function () {clearInterval(timer)}// 鼠标移出ul又继续轮播图片cur_ul.onmouseleave = function () {timer = setInterval(get_next, 3000)}// 当创建完一个li(li里已经有img元素)就把li添加到arr数组里// arr里存的li 相当于一个对象,在其他地方在把arr里的li取出来,还是指向原来那个,并不是一个新的li// 相当于对象的浅拷贝,指针指向问题arr.push(cur_li)
}

arr里存的li 相当于存了一个对象,存的只是这个li的引用地址,在其他地方再把arr里的li取出来,还是指向原来那个li,修改的也还是原来那个li,并不是一个新的li。

4.JS代码部分,设置轮播图里图片的位置,因为轮播要显示三张图片,即第一种效果,如果要实现第二种效果,这个代码可以不写,然后在设置一下ul的宽即可实现效果二

// 因为所写的轮播图是中间图片放大大,左右两边图片正常,所以要进行下面的操作
// 如果你只需要那种一张张图片轮播,即没有左右两边的轮播图,可以去掉下面代码
// 我们要三张图片进行展示, 左 中 右
var len = arr.length - 1;
// 这是取得左边图片并调整位置
arr[len - 2].style.left = '0px';
// 这是取得中间图片并调整位置
arr[len - 1].style.left = '200px';
// 这是取得右边图片并调整位置
arr[len].style.left = '400px';
// 然后中间图片调用scale使其变大
arr[len - 1].style.transform = 'scale(1.3)'
// 中间图片也给其一个较大的堆叠数值,使其中间图片在左右图片上面
arr[len - 1].style.zIndex = 100;

5、JS代码部分,封装轮播图函数,我们使用一个间歇定时器setInterval来轮播图片(会每隔相应的时间来执行其里面的代码)

// 然后开始进行轮播,原理就是换arr里的li元素的位置,越靠后的li元素z-index越大
// z-index越大,就会叠在其他li元素上面,所以换arr里的li位置就可以实现轮播
function get_next() {var give_up = arr[arr.length - 1];//获取arr数值里最后一个li元素arr.pop();//删除掉最后一个li元素arr.unshift(give_up);//最后把最后一个元素插入到arr数组的前面// 然后重新给arr数组里的li元素设置z-index和scalefor (var i = 0; i < arr.length; i++) {arr[i].style.zIndex = i;arr[i].style.transform = 'scale(1)'}// 这步就是展示arr的后三张图片,和前一个步骤的一样arr[len - 2].style.left = '0px';arr[len - 1].style.left = '200px';arr[len].style.left = '400px';arr[len - 1].style.transform = 'scale(1.3)'arr[len - 1].style.zIndex = 100;
}
// 声明一个定时器,然后把轮播图函数放进间歇函数,3秒进行一次轮播
var timer = setInterval(get_next, 3000)

6.JS代码部分,接下来就是左右两个箭头的创建了

// 用js创建左箭头
var pre_img = document.createElement('img')
pre_img.src = 'img/preImg.png';//左箭头图片
pre_img.style.position = 'absolute';
pre_img.style.top = 0;
pre_img.style.bottom = 0;
pre_img.style.left = 0;
pre_img.style.margin = 'auto';
pre_img.style.zIndex = 100;
cur_ul.appendChild(pre_img);// 用js创建右箭头
var next_img = document.createElement('img')
next_img.src = 'img/nexImg.png';//右箭头的图片
next_img.style.position = 'absolute';
next_img.style.top = 0;
next_img.style.bottom = 0;
next_img.style.right = 0;
next_img.style.margin = 'auto';
next_img.style.zIndex = 100;
cur_ul.appendChild(next_img);

7.然后给箭头绑定点击事件

// 给左箭头点击绑定事件
pre_img.onclick = function () {get_pre();
}
// 右箭头的作用就是向前轮播一直图片,和我们上面写的get_next()方法要实现的功能一样,直接引用
next_img.onclick = function () {get_next();
}// 左箭头的绑定事件 和get_next()思路一样,就是要改一下就行。
// 先取出arr数组第一个li,在把这个li放到最后即可
function get_pre() {var give_up = arr[0];arr.shift();//取出来最后一张图片arr.push(give_up);//把最后一张图片放到第一张for (var i = 0; i < arr.length; i++) {arr[i].style.zIndex = i;arr[i].style.transform = 'scale(1)'}arr[len - 2].style.left = '0px';arr[len - 1].style.left = '200px';arr[len].style.left = '400px';arr[len - 1].style.transform = 'scale(1.3)'arr[len - 1].style.zIndex = 100;
}

整体代码

如果要直接复制,注意要修改下图片的路径,不然你的轮播图名字要是 1.jpg、2.jpg、3.jpg…就行

<!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>Document</title><style>body {background-color: rgb(119, 115, 110);}ul {height: 200px;width: 800px;padding: 0;position: absolute;/* 水平居中 */left: 50%;margin-left: -400px;/* 垂直居中 */top: 50%;margin-top: -100px;list-style: none;}/* 移入到轮播图区域把鼠标形状变成‘手’ */ul:hover {cursor: pointer;}li {position: absolute;left: 0;/* 过渡属性,让轮播图切换更自然 */transition: 0.4s;}</style>
</head><body><ul id="banner"></ul><script>//1.获取ulvar cur_ul = document.getElementById('banner')// 2.创建一个数组实例var arr = new Array();// 用js来创建li、img元素,有多少张图片要轮播就循环多少次for (i = 1; i <= 5; i++) {// 创建li元素var cur_li = document.createElement('li')// 创建img元素var cur_img = document.createElement('img')// 给img元素设置src、width、height属性// 这里src是轮播图的路径// 在img文件夹下的图片命名为1.jpg、2.jpg、3.jpg....才可以这样写cur_img.src = 'img/' + i + '.jpg';cur_img.style.width = '400px';cur_img.style.height = '200px';// 把img元素插入到创建的li里面cur_li.appendChild(cur_img);// 然后在把li插入到ul里面cur_ul.appendChild(cur_li);// 然后给ul元素设置事件,鼠标移进来停止轮播cur_ul.onmouseenter = function () {clearInterval(timer)}// 鼠标移出ul又继续轮播图片cur_ul.onmouseleave = function () {timer = setInterval(get_next, 3000)}// 当创建完一个li(li里已经有img元素)就把li添加到arr数组里// arr里存的li 相当于一个对象,在其他地方在把arr里的li取出来,还是指向原来那个,并不是一个新的li// 相当于对象的浅拷贝,指针指向问题arr.push(cur_li)}// 因为所写的轮播图是中间图片放大大,左右两边图片正常,所以要进行下面的操作// 如果你只需要那种一张张图片轮播,即没有左右两边的轮播图,可以去掉下面代码// 我们要三张图片进行展示, 左 中 右  var len = arr.length - 1;// 这是取得左边图片并调整位置arr[len - 2].style.left = '0px';// 这是取得中间图片并调整位置arr[len - 1].style.left = '200px';// 这是取得右边图片并调整位置arr[len].style.left = '400px';// 然后中间图片调用scale使其变大arr[len - 1].style.transform = 'scale(1.3)'// 中间图片也给其一个较大的堆叠数值,使其中间图片在左右图片上面arr[len - 1].style.zIndex = 100;// 封装轮播图函数 // 然后开始进行轮播,原理就是换arr里的li元素的位置,越靠后的li元素z-index越大// z-index越大,就会叠在其他li元素上面,所以换arr里的li位置就可以实现轮播function get_next() {var give_up = arr[arr.length - 1];//获取arr数值里最后一个li元素arr.pop();//删除掉最后一个li元素arr.unshift(give_up);//最后把最后一个元素插入到arr数组的前面// 然后重新给arr数组里的li元素设置z-index和scalefor (var i = 0; i < arr.length; i++) {arr[i].style.zIndex = i;arr[i].style.transform = 'scale(1)'}// 这步就是展示arr的后三张图片,和前一个步骤的一样arr[len - 2].style.left = '0px';arr[len - 1].style.left = '200px';arr[len].style.left = '400px';arr[len - 1].style.transform = 'scale(1.3)'arr[len - 1].style.zIndex = 100;}// 声明一个定时器,然后把轮播图函数放进间歇函数,3秒进行一次轮播var timer = setInterval(get_next, 3000)// 用js创建左箭头var pre_img = document.createElement('img')pre_img.src = 'img/preImg.png';//左箭头图片pre_img.style.position = 'absolute';pre_img.style.top = 0;pre_img.style.bottom = 0;pre_img.style.left = 0;pre_img.style.margin = 'auto';pre_img.style.zIndex = 100;cur_ul.appendChild(pre_img);// 用js创建右箭头var next_img = document.createElement('img')next_img.src = 'img/nexImg.png';//右箭头的图片next_img.style.position = 'absolute';next_img.style.top = 0;next_img.style.bottom = 0;next_img.style.right = 0;next_img.style.margin = 'auto';next_img.style.zIndex = 100;cur_ul.appendChild(next_img);// 给左箭头点击绑定事件pre_img.onclick = function () {get_pre();}// 右箭头的作用就是向前轮播一直图片,和我们上面写的get_next()方法要实现的功能一样,直接引用next_img.onclick = function () {get_next();}// 左箭头的绑定事件 和get_next()思路一样,就是要改一下就行。// 先取出arr数组第一个li,在把这个li放到最后即可function get_pre() {var give_up = arr[0];arr.shift();//取出来最后一张图片arr.push(give_up);//把最后一张图片放到第一张for (var i = 0; i < arr.length; i++) {arr[i].style.zIndex = i;arr[i].style.transform = 'scale(1)'}arr[len - 2].style.left = '0px';arr[len - 1].style.left = '200px';arr[len].style.left = '400px';arr[len - 1].style.transform = 'scale(1.3)'arr[len - 1].style.zIndex = 100;}</script>
</body></html>

JS来实现轮播图(走马灯)可左右切换图片,鼠标移入会停止轮播相关推荐

  1. ElementUi中轮播图走马灯如何实现添加图片

    <template>   <el-row class="warp">     <el-col :span="12" class=& ...

  2. JS轮播图(点击切换、自动播放、悬停控制)

    JS轮播图 轮播图可以说是网页上十分常见的效果,很多朋友在学习JavaScript后都迫不及待的想写一些好看对的效果出来,那么轮播图就是一个很不错的练手实例.下面就是通过JS写的轮播图效果: 功能介绍 ...

  3. php 走马灯轮播,Vue.js轮播图走马灯代码实例(全)

    这个是html, 数据中我用了一个数组来放图片的目录, data() { return { superurl: [ { url: '', img: '../../../../static/image/ ...

  4. ElementUi轮播图走马灯添加图片

    ElementUi轮播图走马灯添加图片 官网例子 改造适用 效果 官网例子 这里我们拿官网的例子作为讲解 链接: 官网. 代码 <template><el-carousel :int ...

  5. 轮播图进度条同步切换(参考漫威官网)

    轮播图进度条同步切换(参考漫威官网) <!DOCTYPE html> <html lang="en"><head><meta charse ...

  6. 轮播图高度自适应_干货!弘成教你写轮播图全自动适应封装代码

    点击蓝字 关注我们 在弘成教育任UI讲师,带了几十个班数百个学生了,我发现学生们最头疼的不是网站界面的设计,各种网站的设计,专题页,详情页,店铺装修,他们都能设计得漂漂亮亮.也不是HTML+CSS的静 ...

  7. 利用swiper在vue中做轮播图,并改变轮播图的原有箭头、图片等内容

    目标:利用swiper在vue中做轮播图,并改变轮播图的原有箭头.图片等内容. 实现效果:1.点击左右箭头可切换图片. 2.点击后图片出现最左侧样式效果,只有被点击的图片有此效果,不被点击恢复默认效果 ...

  8. jquery手写轮播图_用jQuery如何手写一个简单的轮播图?(附代码)

    用jQuery如何手写一个简单的轮播图?下面本篇文章通过代码示例来给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 用 jQuery 手写轮播图 先上个效果截图: 主要 ...

  9. Vue.js轮播图走马灯 (详解)

    直接上代码: 轮播图1: html <template><div><div class="back_add"><div class=&qu ...

最新文章

  1. FineUIMvc随笔(6)对比WebForms和MVC中表格的数据库分页
  2. python语言打印菱形_Python 实现打印单词的菱形字符图案
  3. 比 Java 更具争议的 PHP,处处留坑?
  4. 2019国内高端智能云呼叫中心系统,让简单的工作变得更有值得
  5. 2010.3.13郊野公园小记,以及参观托驼峰航线纪念碑
  6. linux内核代码_解决Linux内核代码审阅者短缺的问题
  7. 基于PHP的校园竞赛信息网站 毕业设计-附源码221230
  8. windows功能_四款功能强大的windows软件,个个都是精品!
  9. java的常量和变量_JAVA-常量和变量
  10. 搞事情 | 大数据文摘和ta的朋友们:环游世界的80天
  11. python敲七游戏代码_Python_day04_2018.7.5-(Lis列表的介绍,增删改查)
  12. 这些强大的数据分析软件你都知道吗?
  13. 揭秘:如何只用一个软件分析股市数据?
  14. 运营笔记:微信推广运营的这些中肯建议,请收藏!
  15. 2019年TI杯 简易电路特性测试仪 制作过程(4)——程序总体分析 20/04/20
  16. 正在连接localhost...无法打开到主机的连接。 在port 8080: 连接失败
  17. 《Excel视频6》数值、left/right/mid/find
  18. 计算机网络课程设计小程序,网络课程设计(简单聊天系统的设计与实现).doc
  19. Angular+Node实战之登陆注册
  20. 谷歌眼镜开发Mirror API之Glassware启动清单

热门文章

  1. Unity3D的uniSWF插件动态加载SWF UI资源
  2. 接近开关和欧姆龙的PLC怎么接线?
  3. 前端图片编辑功能的实践小结
  4. PPT学习整理(二)快捷键
  5. 如何阅读Spring源码
  6. Ejoy2D:“风魂”游戏引擎作者云风的又一力作
  7. 字典树应用(1)字典树简介
  8. 漫画解读:通过造汽车了解软件开发模式 ​​​
  9. 微信支付系列(二)之订单的创建
  10. 不一样的 LaTeX 教程:使用 listings 宏包美化代码