本文实例为大家分享了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。

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

JavaScript仿京东轮播图效果的更多相关文章

  1. html5 拖拽及用 js 实现拖拽功能的示例代码

    这篇文章主要介绍了html5 拖拽及用 js 实现拖拽,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. swift皮筋弹动发射飞机ios源码

    这是一个款采用swift实现的皮筋弹动发射飞机游戏源码,游戏源码比较详细,大家可以研究学习一下吧。

  4. Swift与Js通过WebView交互

    开发环境:Swfit2.3XCode8.2基础概念jscontext,jscontext是代表JS的执行环境,通过-evaluateScript:方法就可以执行一JS代码JSValue,JSValue封装了JS与ObjC中的对应的类型,以及调用JS的API等JSExport,JSExport是一个协议,遵守此协议,就可以定义我们自己的协议,在协议中声明的API都会在JS中暴露出来,才能调用Swif

  5. JSCore swift

    如果双方相互引用,会造成循环引用,而导致内存泄露。以上是Jscore的基本使用,比较简单

  6. Swift WKWebView的js调用swift

    最近项目需求,需要用到JavaScriptCore和WebKit,但是网上的资源有限,而且比较杂,都是一个博客复制另外一个博客,都没有去实际敲代码验证,下面给大家分享一下我的学习过程。

  7. Swift WKWebView的swift调用js

    不多说,直接上代码:在html里面要添加的的代码,显示swift传过去的参数:这样就实现了swift给js传参数和调用!

  8. 在 Swift 專案中使用 Javascript:編寫一個將 Markdown 轉為 HTML 的編輯器

    你有強烈的好奇心,希望在你的iOS專案中使用JavaScript。jscontext中的所有值都是JSValue對象,JSValue類用於表示任意類型的JavaScript值。因此,我們既需要寫Swift代碼也要寫JavaScript代碼。此外,我們還會在JavaScript中按照這個類的定義來創建一個對象并對其屬性進行賦值。從Swift中呼叫JavaScript就如介紹中所言,JavaScriptCore中最主要的角色就是jscontext類。一個jscontext對象是位於JavaScript環境和本

  9. swift - WKWebView JS 交互

    本文介绍WKWebView怎么与js交互,至于怎么用WKWebView这里就不介绍了HTML代码APP调JS代码结果JS给APP传参数首先注册你需要监听的js方法名2.继承WKScriptMessageHandler并重写userContentController方法,在该方法里接收JS传来的参数3.结果

  10. swift 开发UIWebView跟JS的交互

    前言作为小白的我,才开始入门IOS,选择了swift来进行入门学习,学习做着公司一个简单的小小项目,该项目需要进行跟H5进行交互,然后我就开始研究了UIWebView的使用,其实基本原理跟Android的一样,因为我是Android开发的,所以就顺水推舟了。))//这里设置你需要加载的地址}overridefuncdidReceiveMemoryWarning(){super.didReceiveMemoryWarning()//disposeofanyresourcesthatcanberecreate

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部