JavaScript仿京东轮播图效果


Posted in Javascript onFebruary 25, 2021

本文实例为大家分享了JavaScript实现京东轮播图效果展示的具体代码,供大家参考,具体内容如下

做了一个仿京东的轮播图,当然没有人家官网的精美啦。

JavaScript仿京东轮播图效果

主要技术点:

  • 每隔3秒自动切换图片;
  • 鼠标移入图片自动暂停切换,鼠标移出则继续;
  • 点击左右方向按钮手动切换图片;
  • 鼠标移到灰色圆点,显示对应的图片,并加亮显示。

HTML代码:

<body>
 <h1>轮播图展示</h1>
 <div id="did">

 <!-- 图片 -->
 <div id="img-div" onmouseover="doStop()" onmouseout="doStart()">
  <img src="./1.jpg">
  <img src="./2.jpg">
  <img src="./3.jpg">
  <img src="./4.jpg">
  <img src="./5.jpg">
  <img src="./6.jpg">
  <img src="./7.jpg">
  <img src="./8.jpg">
 </div>

 <!-- 左右按钮 -->
 <div id="btn-div">
  <div id="left-btn" onclick="doLeftClick()">
  <h3> < </h3>
  </div>
  <div id="right-btn" onclick="doRightClick()">
  <h3> > </h3>
  </div>
 </div>

 <!-- 圆点 -->
 <div id="cir-div">
  <div onmouseover="doMove(1)"></div>
  <div onmouseover="doMove(2)"></div>
  <div onmouseover="doMove(3)"></div>
  <div onmouseover="doMove(4)"></div>
  <div onmouseover="doMove(5)"></div>
  <div onmouseover="doMove(6)"></div>
  <div onmouseover="doMove(7)"></div>
  <div onmouseover="doMove(8)"></div>
 </div>
 </div>

</body>

CSS代码:

<style>
 * {
 margin: 0px;
 padding: 0px;
 }

 body {
 background-color: rgb(255, 249, 249);
 }

 h1 {
 text-align: center;
 padding-top: 40px;
 color: rgba(250, 54, 129, 0.562);
 }

 #did {
 position: relative;
 width: 590px;
 height: 470px;
 margin: 30px auto;
 }

 #img-div {
 position: absolute;
 }

 #img-div img {
 width: 590px;
 display: none;
 cursor: pointer;
 z-index: -1;
 }

 /* 这两段可不加 */
 /* 显示第一张图片 */
 #img-div img:first-child {
 display: block;
 }

 /* 点亮第一个圆点 */
 #cir-div div:first-child {
 background: #fff;
 }

 #cir-div {
 position: absolute;
 /* 相对于图片的位置 */
 left: 40px;
 bottom: 25px;
 }

 /* 下方圆点 */
 #cir-div div {
 width: 8px;
 height: 8px;
 float: left;
 /* 50%时为圆形 */
 border-radius: 50%;
 margin-right: 6px;
 border: 1px solid rgba(0, 0, 0, .05);
 background: rgba(255, 255, 255, .4);
 }

 #left-btn {
 position: absolute;
 /* 相对于图片的位置 */
 top: 45%;

 /* 左半圆按钮 */
 width: 27px;
 height: 38px;
 background: rgba(119, 119, 119, 0.5);
 border-radius: 0 20px 20px 0;
 /* 动画效果,放在变化前,当鼠标移动上面时,会缓慢变色 */
 transition: background-color 0.3s ease-out;
 }

 #right-btn {
 position: absolute;
 /* 相对于图片的位置 */
 top: 45%;
 right: 0px;

 /* 右半圆按钮 */
 width: 27px;
 height: 38px;
 background-color: rgba(119, 119, 119, 0.5);
 border-radius: 20px 0 0 20px;
 /* 动画效果,放在变化前,当鼠标移动上面时,会缓慢变色 */
 transition: background-color 0.3s ease-out;
 }

 #left-btn:hover {
 background-color: rgba(32, 32, 32, 0.5);
 cursor: pointer;
 }

 #right-btn:hover {
 background-color: rgba(32, 32, 32, 0.5);
 cursor: pointer;
 }

 #left-btn h3 {
 color: #fff;
 margin-top: 4px;
 margin-left: 2px;
 }

 #right-btn h3 {
 color: #fff;
 margin-top: 4px;
 margin-left: 8px;
 }
</style>

JavaScript代码:

<script>
 //显示第几张图片
 var count = 1;
 //时间
 var time = null;
 //图片列表
 var imglist = document.getElementById("img-div").getElementsByTagName("img");
 //圆点列表
 var cirlist = document.getElementById("cir-div").getElementsByTagName("div");

 //展示对应的图片和点亮对应的圆点
 function show(x) {
 for (var i = 0; i < imglist.length; i++) {
  if (x == i + 1) {
  //显示图片
  imglist[i].style.display = "block";
  //圆点点亮
  cirlist[i].style.backgroundColor = "#fff";
  } else {
  imglist[i].style.display = "none";
  cirlist[i].style.background = "rgba(255, 255, 255, .4)";
  }
 }
 }

 //定时轮播图片(每3秒切换一张图片)
 function doStart() {
 if (time == null) {
  time = setInterval(function () {
  count++;
  show(count);
  if (count >= 8) {
   count = 0;
  }
  }, 3000);
 }
 }

 //停止轮播图片
 function doStop() {
 if (time != null) {
  clearInterval(time);
  time = null;
 }
 }

 //鼠标移到圆点上图片会相应切换,并且之后会点亮下一个圆点 而不是未移到圆点前的下一个圆点
 function doMove(x) {
 show(x);
 //将位置赋给count,图片就会从该图片的下一张开始切换
 count = x;
 //当鼠标移到最后一个圆点时,需要将count变为0,不然执行doStart()里的count++,count就会变为9,越界了
 if (count == 8) {
  count = 0;
 }
 }

 /*
 对于i 、count和show(x)里x的关系:
  i = [0,7];
  x = [1,8];
  count = [1,8];
 */
 //点击左边按钮向左切换图片
 function doLeftClick() {
 for (var i = 0; i < imglist.length; i++) {
  //判断当前在展示的是哪张图片
  if (imglist[i].style.display == "block") {
  if (i == 0) {
   show(8);
   // 忘掉这句后,break会直接退出,当左按钮按到最右的圆点,会直接忽略圆点1,直接跳到圆点2
   count = 0;
   //保证切换是3秒钟
   doStop();
   doStart();
   break;
  }
  show(i);
  count = i;
  //保证切换是3秒钟
  doStop();
  doStart();
  break;
  }
 }
 }

 //点击右边按钮向右切换图片
 function doRightClick() {
 for (var i = 0; i < imglist.length; i++) {
  //判断当前在展示的是哪张图片
  if (imglist[i].style.display == "block") {
  if (i == 7) {
   show(1);
   count = 1;
   doStop();
   doStart();
   break;
  }
  show(i + 2);
  count = i + 2;
  //就不会出现切换到没有图片的情况
  if (count >= 8) {
   count = 0;
  }
  doStop();
  doStart();
  break;
  }
 }
 }

 doStart();
 //默认打开页面显示的是第一张图片
 //(不加,会出现第1个圆点亮也就是刚打开页面时,左按钮没反应)
 doMove(1);
</script>

遇到的难点:

虽说轮播图看起来还蛮简单的,但实现起来还挺多问题的。不过我发现的都解决掉了。

  • 圆点与按钮放置在图片上
  • 自动切换图片了但对应的圆点没有点亮
  • 鼠标移到圆点上图片切换了,但下一个自动点亮的圆点却是未移到圆点前的下一个
  • 第1个圆点亮也就是刚打开页面时,左按钮没反应
  • 当左按钮按到最右的圆点,会直接忽略圆点1,直接跳到圆点2
  • 在最后一个圆点时点击右按钮时,会出现切换到没有图片的情况
  • 点左按钮切换时间大概2秒,点右按钮切换时间大概5秒,时间并没有达到标准的3秒

不过我都解决啦!

最大的感触就是刚解决掉一个bug正沾沾自喜时,又来一个bug。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS实现浏览器菜单命令
Sep 05 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
Dec 08 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
Mar 11 Javascript
简单封装js的dom查询实例代码
Jul 08 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
Sep 13 Javascript
jquery animate动画持续运动的实例
Nov 29 jQuery
vue axios请求超时的正确处理方法
Apr 02 Javascript
JS中this的指向以及call、apply的作用
May 06 Javascript
关于JS解构的5种有趣用法
Sep 05 Javascript
VUE实现强制渲染,强制更新
Oct 29 Javascript
如何开发一个渐进式Web应用程序PWA
May 10 Javascript
react 路由Link配置详解
Nov 11 Javascript
Vue基本指令实例图文讲解
Feb 25 #Vue.js
使用webpack和rollup打包组件库的方法
Feb 25 #Javascript
vue常用高阶函数及综合实例
Feb 25 #Vue.js
原生JS实现音乐播放器的示例代码
Feb 25 #Javascript
详解vite2.0配置学习(typescript版本)
Feb 25 #Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 #Vue.js
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
Feb 24 #Javascript
You might like
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
Yii2单元测试用法示例
2016/11/12 PHP
PHP7扩展开发之hello word实现方法详解
2018/01/15 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
简单谈谈axios中的get,post方法
2017/06/25 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
Python查找相似单词的方法
2015/03/05 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python 修改列表中的元素方法
2018/06/26 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
python如何删除文件中重复的字段
2019/07/16 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
Python Dict找出value大于某值或key大于某值的所有项方式
2020/06/05 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
体育专业求职信
2014/07/16 职场文书
个人合伙协议书范本
2014/10/14 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
宝宝满月祝酒词
2015/08/10 职场文书