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 相关文章推荐
基于Jquery实现表格动态分页实现代码
Jun 21 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
Jun 09 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
Jun 29 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
Oct 28 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
Dec 08 Javascript
js实现单张图片平移切换效果
Oct 11 Javascript
Bootstrap-table使用footerFormatter做统计列功能
Sep 07 Javascript
JS数组中对象去重操作示例
Jun 04 Javascript
javascript面向对象程序设计实践常用知识点总结
Jul 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 Class&amp;Object -- 解析PHP实现二叉树
2013/06/25 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
js获取select标签选中值的两种方式
2014/01/09 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
Underscore源码分析
2015/12/30 Javascript
巧用canvas
2017/01/21 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
[01:56]《DOTA2》中文配音CG
2013/04/22 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python中的groupby分组功能的实例代码
2018/07/11 Python
python制作抖音代码舞
2019/04/07 Python
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
Myprotein意大利官网:欧洲第一运动营养品牌
2018/11/22 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
在校生党员自我评价
2013/09/25 职场文书
专科毕业生学习生活的自我评价
2013/10/26 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
个人自荐书
2013/12/20 职场文书
广告业务员岗位职责
2014/02/06 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书