使用JS实现图片轮播的实例(前后首尾相接)


Posted in Javascript onSeptember 21, 2017

最近各种跑面试,终于还是被问到这个,一脑子浆糊,当时没想出来首尾相接怎么搞,回来之后研究了一波,终于搞出来了,不多说,直接看代码

代码参考了一位已经写好了图片轮播功能的(再次表示感谢),但是没有首尾相接的功能,本人在此基础上增加了首尾相接功能。

效果如下:

使用JS实现图片轮播的实例(前后首尾相接)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>图片轮播</title>
 <style type="text/css">
 body,div,ul,li,a,img{margin: 0;padding: 0;}
 ul,li{list-style: none;}
 a{text-decoration: none;}
 #wrapper{
  position: relative;
  margin: 30px auto; /* 上下边距30px,水平居中 */
  width: 400px;
  height: 200px;
 }
 #banner{
  position:relative;
  width: 400px;
  height: 200px;
  overflow: hidden;
 }
 .imgList{
  position:relative;
  width:2000px;
  height:200px;
  z-index: 10;
  overflow: hidden;
 }
 .imgList li{float:left;display: inline;}
 #prev,
 #next{
  position: absolute;
  top:80px;
  z-index: 20;
  cursor: pointer;
  opacity: 0.2;
  filter:alpha(opacity=20);
 }
 #prev{left: 10px;}
 #next{right: 10px;}
 #prev:hover,
 #next:hover{opacity: 0.5;filter:alpha(opacity=50);}

</style>
</head>
<body>
 <div id="wrapper"><!-- 最外层部分 -->
 <div id="banner"><!-- 轮播部分 -->
  <ul class="imgList"><!-- 图片部分 -->
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="./img/1.jpg" width="400px" height="200px" alt="1"></a></li>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="./img/2.jpg" width="400px" height="200px" alt="2"></a></li>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="./img/3.jpg" width="400px" height="200px" alt="3"></a></li>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="./img/4.jpg" width="400px" height="200px" alt="4"></a></li>
  <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="./img/5.jpg" width="400px" height="200px" alt="5"></a></li>
 </ul>
 <img src="./img/prev.png" width="40px" height="40px" id="prev">
 <img src="./img/next.png" width="40px" height="40px" id="next">
</div>
</div>
<script type="text/javascript" src="./js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
var curIndex = 0, //当前index
 imgLen = $(".imgList li").length; //图片总数
$(".imgList").css("width", (imgLen+1)*400+"px");
// 定时器自动变换3秒每次
var autoChange = setInterval(function(){
 if(curIndex < imgLen-1){
  curIndex ++;
 }else{
  curIndex = 0;
 }
 //调用变换处理函数
 changeTo(curIndex);
},3000);

//左箭头滑入滑出事件处理
$("#prev").hover(function(){
 //滑入清除定时器
 clearInterval(autoChange);
}, function(){
 //滑出则重置定时器
 autoChangeAgain();
});

//左箭头点击处理
$("#prev").click(function(){
 //根据curIndex进行上一个图片处理
 // curIndex = (curIndex > 0) ? (--curIndex) : (imgLen - 1);
 if (curIndex == 0) {
  var element = document.createElement("li");
  element.innerHTML = $(".imgList li")[imgLen - 1].innerHTML;
  // $(".imgList li")[imgLen - 1].remove();
  $(".imgList").prepend(element);
  $(".imgList").css("left", -1*400+"px");
  changeTo(curIndex);
  curIndex = -1;
 } else if (curIndex == -1) {
  $(".imgList").css("left", -(imgLen-1)*400+"px");
  curIndex = imgLen-2;
  $(".imgList li")[0].remove();
  changeTo(curIndex);
 } else {
  --curIndex;
  changeTo(curIndex);
 }

});

//右箭头滑入滑出事件处理
$("#next").hover(function(){
 //滑入清除定时器
 clearInterval(autoChange);
}, function(){
 //滑出则重置定时器
 autoChangeAgain();
});
//右箭头点击处理
$("#next").click(function(){
 // curIndex = (curIndex < imgLen - 1) ? (++curIndex) : 0;
 console.log(imgLen);
 if (curIndex == imgLen-1) {
  var element = document.createElement("li");
  element.innerHTML = $(".imgList li")[0].innerHTML;
  // $(".imgList li")[0].remove();
  $(".imgList").append(element);
  ++curIndex;
 } else if (curIndex == imgLen) {
  curIndex = 0;
  $(".imgList").css("left", "0px");
  $(".imgList li")[imgLen].remove();
  curIndex++;
 } else {
  ++curIndex;
 }
 changeTo(curIndex);
});

//清除定时器时候的重置定时器--封装
function autoChangeAgain(){
 autoChange = setInterval(function(){
  if(curIndex < imgLen-1){
   curIndex ++;
  }else{
   curIndex = 0;
  }
 //调用变换处理函数
 changeTo(curIndex);
 },3000);
}


function changeTo(num){
 var goLeft = num * 400;
 $(".imgList").animate({left: "-" + goLeft + "px"},500);
}
</script>
</body>
</html>

以上这篇使用JS实现图片轮播的实例(前后首尾相接)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
动态控制Table的js代码
Mar 07 Javascript
JTrackBar水平拖动效果
Jul 15 Javascript
JQUERY设置IFRAME的SRC值的代码
Nov 30 Javascript
js控制CSS样式属性语法对照表
Dec 11 Javascript
java和javascript获取word文档的书签位置对比
Jun 19 Javascript
通过BootStrap实现轮播图的实际应用
Sep 26 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
详解angularjs利用ui-route异步加载组件
May 21 Javascript
JS FormData上传文件的设置方法
Jul 05 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
JavaScript函数定义方法实例详解
Mar 05 Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 Javascript
Node调用Java的示例代码
Sep 20 #Javascript
浅谈react前后端同构渲染
Sep 20 #Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
Sep 20 #Javascript
微信小程序 页面跳转事件绑定的实例详解
Sep 20 #Javascript
微信小程序 数据绑定及运算的简单实例
Sep 20 #Javascript
Angularjs使用过滤器完成排序功能
Sep 20 #Javascript
微信小程序 swiper组件构建轮播图的实例
Sep 20 #Javascript
You might like
PHP之变量、常量学习笔记
2008/03/27 PHP
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
python 写的一个爬虫程序源码
2016/02/28 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
毕业生自我鉴定范文
2013/11/08 职场文书
公司聘任书模板
2014/03/29 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
房屋租赁协议书
2014/10/18 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
介绍信的格式
2015/01/30 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript