JavaScript实现图片轮播特效


Posted in Javascript onOctober 23, 2019

今天给大家介绍下怎么用 JS 实现图片轮播效果。

原理描述:

使用JS实现轮播的原理是这样的:

假设初始的情况,下图一个网格代表一个图,初始时,显示1 :

JavaScript实现图片轮播特效

当进行一次轮播后,显示变为下图 显示2:

JavaScript实现图片轮播特效

依次类推。

代码实现:

1 JS 代码:

<script type="text/javascript">
 window.οnlοad=function(){
 //获得ul的元素
 var imgList=document.getElementById("imgList");
 //获得图片的数组
 var imgArr=document.getElementsByTagName("img");
 var navId=document.getElementById("navId");
 var outer=document.getElementById("outer");
 imgList.style.width=520*imgArr.length+"px";
 //设置navId的位置 使其居中
 navId.style.left=(outer.offsetWidth-navId.offsetWidth)/2+"px";
 //得到所有的a 标签 如果有其他的A的话 这里需要注意要使用navId子元素的a 
 var allA=document.getElementsByTagName("a");
 var index=0;
 allA[index].style.backgroundColor='black';//设置默认的a为黑色
 for(var i=0;i<allA.length;i++){
  allA[i].num=i;
  //alert(allA[i].num);
  allA[i].οnclick=function(){
  clearInterval(timer);
  index=this.num;
  /* imgList.style.left= -520*index+"px"; */
  setA();
  move(imgList,"left",-520*index,50,function(){
   autoChange();
  });
  };
 }
 
 function setA(){
  //alert(index);
  //当indcx值比图片的数目多的时候 就归0
  if(index>=imgArr.length-1){
  index=0;
  imgList.style.left=0;
  } 
  for(var i=0;i<allA.length;i++){
  //去掉未点击的颜色 仍然保留a : hover有用
  allA[i].style.backgroundColor="";
  }
  allA[index].style.backgroundColor="black";
 }
 var timer;
 function autoChange(){
  
  timer=setInterval(function(){
  index++;
  index%=imgArr.length;
  move(imgList,"left",-520*index,20,function(){
   setA();
   });
  },2000); 
 }
 autoChange();

//可以根据 target 参数进行判断 向哪个方向移动
 function move(obj,attr,target,speed,callback){
  var current=parseInt(getStyle(obj,attr));
  //alert(current);
  //根据目标的位置来判定 speed的值是正是负
  if(current>target){
  speed=-speed;
  }
  //自定义对象定时器 防止对象之间的混乱操作 
  clearInterval(obj.timer);
  //alert(oldValue);
  obj.timer=setInterval(function(){
  var oldValue=parseInt(getStyle(obj,attr));
  var newVal=oldValue+speed;
  //如果移动的越界 进行重置
  if((speed<0 && newVal<=target) || (speed>0 && newVal>=target)){
   newVal=target;
  }
  obj.style[attr]=newVal+"px";
  if(newVal==target){
   clearInterval(obj.timer);
   callback && callback();//回掉函数 先判断 有就执行 没有不执行
  } 
  },30);
 }
 
 //obj:获取样式元素
 //name:获取样式名
 function getStyle(obj,name){
  if(window.getComputedStyle){
  return getComputedStyle(obj,null)[name];
  }else{
  return obj.currentStyle[name];
  }
 }
 }
</script>

2  HTML 代码:

<div id="outer">
 <ul id="imgList">
 <li><img src="img/1.jpg"></li>
 <li><img src="img/2.jpg"></li>
 <li><img src="img/3.jpg"></li>
 <li><img src="img/1.jpg"></li><!-- 增加这个为了实现轮播无缝切换 -->
 </ul>
 <div id="navId">
 <a href="javascript:0" ></a>
 <a href="javascript:0" ></a>
 <a href="javascript:0" ></a>

 </div>
</div>

3 CSS代码:

<style type="text/css">
 *{
 margin:0px;
 padding:0px;
 }
 #outer{
 width:520px;
 height:500px;
 margin:50px auto;
 background-color:greenyellow;
 padding:10px 0;
 /* 开启相对定位*/ 
 position:relative;
 overflow:hidden;/* 将超出的部分隐藏 */
 /* border:3px solid greenyellow */
 }
 #imgList{
 /*去除li的点*/
 list-style:none;
 /*开启绝对定位 */
 position:absolute;
 /*设置ul的宽度*/
 /* width:1560px; */
 }
 #imgList li{
 /*为图片设置浮动*/
 float:left;
 margin:0 10px;/*设置左右外边距*/
 }
 #navId{
 /* 开启绝对定位 */
 position:absolute;
 /*设置位置*/
 bottom:15px;
 /*设置该块的左偏移量,使其可以居中
 由于outer 宽 520 每个链接宽15+2*5=25 目前共三张图,则共宽75*/
 /* left:212px; */
 }
 #navId a{
 width:15px;
 height:15px;
 float:left;/* 设置超链接浮动 */
 margin:0 5px;
 background-color:red;
 opacity:0.5;
 /*兼容 IE8 设置透明度*/
 filter:alpha(opacity=50);
 }
 /*设置鼠标移入效果*/
 #navId a:hover{
 background-color:black;
 }
 
</style>

4 实现效果:

JavaScript实现图片轮播特效

更多关于轮播图效果的专题,请点击下方链接查看学习

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

Javascript 相关文章推荐
JSChart轻量级图形报表工具(内置函数中文参考)
Oct 11 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
Apr 27 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
Jan 28 Javascript
详解JavaScript中getFullYear()方法的使用
Jun 10 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
vue-test-utils初使用详解
May 23 Javascript
详解vue项目中实现图片裁剪功能
Jun 07 Javascript
Vue-cli3多页面配置详解
Mar 22 Javascript
JavaScript变量Dom对象的所有属性
Apr 30 Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 #jQuery
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 #Javascript
Vue实现数据请求拦截
Oct 23 #Javascript
Vue项目中如何使用Axios封装http请求详解
Oct 23 #Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
Oct 23 #Javascript
原生JS无缝滑动轮播图
Oct 22 #Javascript
Vue实现开心消消乐游戏算法
Oct 22 #Javascript
You might like
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
php中session_unset与session_destroy的区别分析
2011/06/16 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
jquery trigger函数执行两次的解决方法
2016/02/29 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
浅谈使用Python内置函数getattr实现分发模式
2018/01/22 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
python爬取代理ip的示例
2020/12/18 Python
纯html5+css3下拉导航菜单实现代码
2013/03/18 HTML / CSS
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
女子职高个人自荐书
2014/02/01 职场文书
入党申请书格式
2019/06/20 职场文书
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers