完美实现js焦点轮播效果(二)(图片可滚动)


Posted in Javascript onMarch 07, 2017

本文在前一篇js焦点轮播效果的基础上,使用函数递归实现图片滑动切换,采用辅助图片实现图片无限滚动等技巧,具体内容如下

假如前后不加一张图片的话,图片顺序为[1,2,3,4,5],当你点到第 5 张图时,再点“下一张”(就是要回到第 1 张图那里),这时候,你想象下那个画面,会一瞬间“刷刷刷”地闪过中间那几张图片才能到第 1 张图那里,这样,太难看了吧。

为了解决这个问题,所以要在第 5 张那里加多一张 1 图,图片顺序为 [1,2,3,4,5,1]。当你在第 5 张图点下一张时,图片滚动顺序是这样的:5 ----> (1) ----> 1,(注:中间的那个 1 是指后面多加的 1 图),一旦到了那个“多加的 1 图”,轮播就会瞬间回到 前面的 1 图那里。

因为都是“1 图”,所以视觉上不会有那个一次“刷刷刷”闪过好几张图片的效果。

效果如图:

完美实现js焦点轮播效果(二)(图片可滚动)

实现代码:

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <style type="text/css">
    *{
      margin: 0;
      padding: 0;
      list-style: none;
      text-decoration: none;
    }
    .wrap{
      width: 490px;
      height: 170px;
      margin: 100px auto;
      border: 1px solid #000000;
      position: relative;
      overflow: hidden;
    }
    #pic{
      width: 3430px;
      position: absolute;
    }
    #pic li{
      float: left;
      height: 170px;
    }
    #list{
      position: absolute;
      bottom: 10px;
      left:150px ;
    }
    #list li{
      float: left;
      width: 15px;
      height: 15px;
      background: #fff;
      margin: 0 10px;
      border-radius: 50%;
      cursor: pointer;
    }
    #list .on{
      background: #e27a00;
    }
    .Prev{
      top: 30px;
      left: 0;
    }
    .Next{
      top: 30px;
      right: 0;
    }
    .Prev,.Next{
      position: absolute;
      font-size: 80px;
      font-weight: bold;
      color:#fff ;
      -webkit-transition: all 0.35s ease-in-out
    }
    .Next:hover,
    .Prev:hover{
      background: #ccc;
      background: rgba(204, 204, 204, 0.4);
    }

  </style>
  <script type="text/javascript">
    window.onload=function(){
      var wrap=document.getElementById('wrap');
      var pic=document.getElementById('pic');
      var Li=document.getElementById('list').getElementsByTagName('li');
      var prev=document.getElementById('Prev');
      var next=document.getElementById('Next');
      var animated=false;
      var index=0;
      var timer=null;
      next.onclick=function(){
        if(animated){//如果图片正在滚动时要返回,否则index会变化
          return;
        }
        else{
          index++;
          if(index>=Li.length){
            index=0;
          }
        }

        showlist();
        if(animated == false){//if(!animated)
          animate(-490);
        }
      }
      prev.onclick=function(){
        if(animated){
          return;
        }
        else{
          index--;
          if(index<=0){
            index=Li.length-1;
          }
        }

        showlist();
        if(!animated){//判断其是否滚动完
          animate(490);
        }
      }
      for(var i=0;i<Li.length;i++){
        Li[i].num=i;
        Li[i].onclick=function(){
          if(this.className=="on"){
            return;
          }
          var offset = -490*(this.num-index);
          if(!animated){
            animate(offset);
          }
          index=this.num;
          showlist();
        }
      }
      //图片变换
      function animate(offset){
        animated=true;
        var newLeft=parseInt(pic.style.left) + offset;
        var time=300//位移总时间
        var interval=10;//位移间隔时间
        var speed=offset/(time/interval);//每次位移量

        function go(){
          if((speed < 0 && parseInt(pic.style.left) > newLeft )|| (speed > 0 && parseInt(pic.style.left) < newLeft)){
            pic.style.left = parseInt(pic.style.left) + speed + 'px';
            setTimeout(go,interval);
          }else{
            animated=false;
            pic.style.left= newLeft + 'px';
            if(newLeft > -490){
              pic.style.left = -2450 + 'px';
            }
            if(newLeft < -2450){
              pic.style.left = -490 + 'px';
            }
          }
        }
        go();
      }
      //圆点变换
      function showlist(){
        for(var i=0;i<Li.length;i++){
          Li[i].className="";
        }
        Li[index].className="on";
      }
      //自动播放
      function play(){
        timer=setInterval(function(){
          next.onclick();
        },2000);
      }
      function stop(){
        clearInterval(timer);
      }
      wrap.onmouseover=stop;
      wrap.onmouseout=play;
      play();
    }
  </script>
</head>
<body>
<div class="wrap" id="wrap">
  <ul id="pic" style="left: -490px;">
    <li><a href="#"><img src="/54111d7d00018ba604900170.jpg" alt="5"/></a></li>
    <li><a href="#"><img src="/54111cd9000174cd04900170.jpg" alt="1"/></a></li>
    <li><a href="#"><img src="/54111dac000118af04900170.jpg" alt="2"/></a></li>
    <li><a href="#"><img src="/54111d9c0001998204900170.jpg" alt="3"/></a></li>
    <li><a href="#"><img src="/54111d8a0001f41704900170.jpg" alt="4"/></a></li>
    <li><a href="#"><img src="/54111d7d00018ba604900170.jpg" alt="5"/></a></li>
    <li><a href="#"><img src="/54111cd9000174cd04900170.jpg" alt="1"/></a></li>
  </ul>
  <ul id="list">
    <li class="on"></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
  <a href="javascript:;" class="Prev" id="Prev"><</a>
  <a href="javascript:;" class="Next" id="Next">></a>
</div>
</body>
</html>

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

Javascript 相关文章推荐
javascript使用activex控件的代码
Jan 27 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
Nov 08 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
Nov 14 Javascript
JS控制表单提交的方法
Jul 09 Javascript
js窗口关闭提示信息(兼容IE和firefox)
Oct 23 Javascript
javascript实现下雪效果【实例代码】
May 03 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
Aug 24 Javascript
JavaScript中浅讲ajax图文详解
Nov 11 Javascript
微信小程序 css使用技巧总结
Jan 09 Javascript
jQuery基于Ajax方式提交表单功能示例
Feb 10 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
Dec 27 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
完美实现js焦点轮播效果(一)
Mar 07 #Javascript
Vue2.0组件间数据传递示例
Mar 07 #Javascript
js实现网页定位导航功能
Mar 07 #Javascript
Vuejs 组件——props数据传递的实例代码
Mar 07 #Javascript
js实现百度登录框鼠标拖拽效果
Mar 07 #Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 #Javascript
原生JavaScript实现Tooltip浮动提示框特效
Mar 07 #Javascript
You might like
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
类似CSDN图片切换效果脚本
2009/09/17 Javascript
extjs render 用法介绍
2013/09/11 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
深入理解node.js之path模块
2017/05/03 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
Python中的pass语句使用方法讲解
2015/05/14 Python
python读取文本中的坐标方法
2018/10/14 Python
python实现复制文件到指定目录
2019/10/16 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
Python使用tkinter实现摇骰子小游戏功能的代码
2020/07/02 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
日语翻译个人求职的自我评价
2013/10/14 职场文书
工商企业管理应届生求职信
2013/11/03 职场文书
高中军训感言1000字
2014/03/01 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
2016年元旦寄语
2015/08/17 职场文书
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技