原生js实现焦点轮播图效果


Posted in Javascript onJanuary 12, 2017

原生js焦点轮播图主要注意这几点:

1、前后按钮实现切换,同时注意辅助图

2、中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index

3、间隔调用与无限轮播。

4、注意在动画时要停止按钮,或者说上一个动画完毕下一个动画才能执行

5、另外在切换图片的时候,底部的Button动画效果,是从底部开始往上升的,要用到transform:scale()和transform-origin:0 100%两个转换属性,代码如下

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8"/>
 <meta name="viewpoint" content="width=device-width,initial-scale=1,user-scalable="no">
 <title>20170101</title>
 <style type="text/css">
 a{text-decoration:none;color:#3DBBF5;}
 .wrapper{width:750px;height:350px;background:#001032;margin:20px auto;text-align:center;box-shadow:0 0 12px 2px hsla(0,20%,30%,0.5);padding:10px 15px;position:relative;}
 .effect{position:relative;cursor:pointer;}
 .effect:hover{color:#02a0e9;}
 .effect:before{width:100%;display:inline-block !important;position:absolute;height:1px;background:#02a0e9;transition:all 0.4s ease-in-out;-webkit-transition:all 0.4s ease-in-out;-moz-transition:all 0.4s ease-in-out;transform:scale(0,1);content:'';bottom:-5px;left:0;}
 .effect:hover:before{transform:scale(1);-webkit-transform:scale(1);}
 #lunBo{margin-top:20px;overflow:hidden;height:300px;width:750px;position:relative;}
 #list{position:absolute;z-index:22;height:300px;width:5250px;}
 #list img{float:left;}
 #buttons { position: absolute; height: 20px; width: 150px; z-index: 99; bottom: 20px; left: 40%;}
    span { cursor: pointer; float: left; width: 10px; height: 5px; background: #333; margin-right: 10px;}
     .on { background: yellow;transition:all 0.4s ease-in-out;-webkit-transition:all 0.4s ease-in-out;-moz-transition:all 0.4s ease-in-out;transform:scale(1,4);-ms-transform:scale(1,4);-moz-transform:scale(1,4);-webkit-transform:scale(1,4);transform-origin:0% 0%;-webkit-transform-origin:0% 100%;-moz-transform-origin:0% 100%;}
  .arrow { cursor: pointer; display: none; line-height: 39px; text-align: center; font-size: 36px; font-weight: bold; width: 40px; height: 100px; line-height:100px;position: absolute; z-index: 92; top: 30%; background-color: RGBA(0,0,0,.3); color: #fff;}
    .arrow:hover { background-color: RGBA(0,0,0,.7);}
    #lunBo:hover .arrow { display: block;}
    #prev { left: 0px;}
    #next { right: 0px;}
 </style>
 </head>
 <body>
 <div class="wrapper">
  <a class="effect" href="#">2016完了,2017来了</a>
  <div id="lunBo">
  <div id="list" style="left:-750px;">
   <img src="http://cdn.attach.qdfuns.com/notes/pics/201701/03/175856saeagzgsnwal15n5.jpg" alt=""/>
   <img src="http://cdn.attach.qdfuns.com/notes/pics/201701/02/235009drzwcaxem2wfgmdc.jpg" alt=""/>
   <img src="http://cdn.attach.qdfuns.com/notes/pics/201701/03/175856m1bhxxx1d8jfnblb.jpg" alt=""/>
   <img src="http://cdn.attach.qdfuns.com/notes/pics/201701/03/175856z48mfrrr8u064rf6.jpg" alt=""/>
   <img src="http://cdn.attach.qdfuns.com/notes/pics/201701/03/175856e95yze236lvq7y2a.jpg" alt=""/>
   <img src="http://cdn.attach.qdfuns.com/notes/pics/201701/03/175856saeagzgsnwal15n5.jpg" alt=""/>
   <img src="http://cdn.attach.qdfuns.com/notes/pics/201701/02/235009drzwcaxem2wfgmdc.jpg" alt=""/>
  </div>
  <div id="buttons">
   <span index="1" class="on"></span>
   <span index="2"></span>
   <span index="3"></span>
   <span index="4"></span>
   <span index="5"></span>
  </div>
  <a href="javascript:;" id="prev" class="arrow"><</a>
  <a href="javascript:;" id="next" class="arrow">></a>
  </div>
 </div>
 <script>
 window.onload = function(){
  var lunBo = document.getElementById('lunBo');
  var list = document.getElementById('list');
  var buttons = document.getElementById('buttons').getElementsByTagName('span');
  //console.log(buttons);
  var prev = document.getElementById('prev');
      var next = document.getElementById('next');
  var index = 1;
  var animated = false;
  var interval = 3000;
  var timer;
  //显示按钮的索引
  function showButton(){
  for(var i = 0 ; i < buttons.length ; i++){
   if( buttons[i].className == 'on' ){
   buttons[i].className = '';
   break;
   };
  };
  buttons[index - 1].className='on';
  };
  function play(){
  timer = setTimeout(function () {
          next.onclick();
          play();
        }, interval);
  };
  function stop(){
  clearTimeout(timer);
  };
  //向前按钮
  next.onclick = function () {
        if (animated) {
          return;
        }
        if (index == 5) {
          index = 1;
        }
        else {
          index += 1;
        }
        animate(-750);
        showButton();
      };
      prev.onclick = function () {
        if (animated) {
          return;
        }
        if (index == 1) {
          index = 5;
        }
        else {
          index -= 1;
        }
        animate(750);
        showButton();
      };
  //parseInt()转换为纯数值
  function animate(offset){
  animated = true;
  var newLeft = parseInt(list.style.left) + offset; //目标值
  var time = 300; //位移总时间为300
  var interval = 10; //
  var speed = offset/(Math.floor(time/interval)); //每次位移量
  function go(){
  if( (speed < 0 && parseInt(list.style.left) > newLeft) || ( speed > 0 && parseInt(list.style.left) < newLeft) ){
   list.style.left = parseInt(list.style.left) + speed + 'px';
    setTimeout(go,interval);
  }else{
   animated = false;
   list.style.left = newLeft+ 'px';  //现在的位移
   if( newLeft > -750){           //假的辅助图
   list.style.left = -3750 + 'px';
   }
   if( newLeft < -3750){
   list.style.left = -750 + 'px';
   }
  }
  };
  go();  
  };
  //小按钮
  for(var i=0;i < buttons.length;i++){
  buttons[i].onclick = function(){

  if(this.className == 'on'){
   return;
  };
   var myIndex = parseInt(this.getAttribute('index'));
   var offset = -750 * (myIndex - index);

   animate(offset);
          index = myIndex;
          showButton();
  }
  }
  lunBo.onmouseout = play;
  lunBo.onmouseover = stop;
  play();
 }
 </script>
 </body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JQuery自定义事件的应用 JQuery最佳实践
Aug 01 Javascript
node.js中的querystring.escape方法使用说明
Dec 10 Javascript
JS数组的常见用法实例
Feb 10 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
Mar 16 Javascript
浅谈jQuery中setInterval()方法
Jul 07 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
Sep 04 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
JS中如何实现复选框全选功能
Dec 19 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
Jan 04 Javascript
vue+element实现表单校验功能
May 20 Javascript
es6数组includes()用法实例分析
Apr 18 Javascript
详解能在多种前端框架下使用的表格控件
Jan 11 #Javascript
vuejs父子组件通信的问题
Jan 11 #Javascript
bootstrap 表单验证使用方法
Jan 11 #Javascript
原生js实现无缝轮播图效果
Jan 11 #Javascript
Bootstrap 填充Json数据的实例代码
Jan 11 #Javascript
原生js实现放大镜效果
Jan 11 #Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
Jan 11 #Javascript
You might like
php实现根据词频生成tag云的方法
2015/04/17 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
Bootstrap教程JS插件弹出框学习笔记分享
2016/05/17 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
python实现在pickling的时候压缩的方法
2014/09/25 Python
Cpy和Python的效率对比
2015/03/20 Python
深入理解Javascript中的this关键字
2015/03/27 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
技校生自我鉴定范文
2013/09/26 职场文书
大学活动邀请函
2014/01/28 职场文书
公司中秋节活动方案
2014/02/12 职场文书
英语国培研修感言
2014/02/13 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
2014年安全员工作总结
2014/11/13 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
Elasticsearch 配置详解
2022/04/19 Java/Android