今天学习了一下轮播图的写作,想到前一阵学过的无缝滚动得思想,所以就把轮播与滚动结合了一下。不过我的代码的神逻辑我自己都不敢恭维,在没网没参照的情况下,只能硬着头皮往下写,希望跟大家共勉吧。

js运动框架的代码如下:

 //获取样式
 function getStyle(obj,attr){
     if(obj.currentStyle){
         return obj.currentStyle[attr];
     }else{
         return getComputedStyle(obj,false)[attr];
     }
 }

 //运动框架
 //complete:time,ease,fn
 function move(obj,json,complete){
     var dis = {};
     var start = {};
     for(var name in json){
         start[name] = parseInt(getStyle(obj,name));
         dis[name] = json[name] - start[name];
     }
     complete = complete || {};
     complete.time = complete.time || 1000;
     complete.ease = complete.ease || "ease-in";

     var count = Math.floor(complete.time/30);
     var n = 0;
     clearInterval(obj.timer);
     obj.timer = setInterval(function(){
         n++;
         for(var name in json){
             switch (complete.ease){
                 case "linear":
                     var a = n/count;
                     var cur = start[name] + dis[name]*a;
                     break;
                 case "ease-in":
                     var a = n/count;
                     var cur = start[name] + dis[name]*a*a*a;
                     break;
                 case "ease-out":
                     var a = 1 - n/count;
                     var cur = start[name] + dis[name]*(1-a*a*a);
                     break;
             }

             if(name == "opacity"){
                 obj.style.opacity = cur;
                 obj.style.filter = "alpha(opacity="+cur*100 +")";
             }else{
                 obj.style[name] = cur + "px";
             }
         }

         if(n == count){
             clearInterval(obj.timer);
             if(complete.fn) complete.fn();
         }
     },30)
 }

运行的效果图如下:

  自动轮播,下方红色按钮同时变换,点击左右箭头分别到达上一张或下一张,问题主要是在第一张和最后一张上面。

神逻辑即将出现,请访客给出好建议哦!!

 <!DOCTYPE HTML>
 <html>
 <head>
     <title></title>
     <style>
         *{
             margin: 0;
             padding: 0;
         }
         #wrap{
             width: 590px;
             height: 340px;
             margin:100px auto;
             position: relative;
             overflow: hidden;
         }
         #box{
             position: absolute;
             left: 0;
             top: 0;
         }
         #box li{
             width: 590px;
             height: 340px;
             list-style: none;
             float: left;
         }
         #btn{
             position: absolute;
             left: 50%;
             margin-left:-100px ;
             bottom: 20px;
         }
         #btn li{
             width: 30px;
             height:30px;
             border-radius: 50%;
             background: #ccc;
             float: left;
             list-style: none;
             margin-right: 10px;
         }
         #btn li.active{
             background: red;
         }
         #wrap a{
             display: block;
             width: 50px;
             height: 50px;
             background: rgba(0,0,0,0.5);
             position: absolute;
             top: 145px;
             color: #fff;
             text-decoration: none;
             line-height: 50px;
             text-align: center;
         }
         #prev{
             left: 0;
         }
         #next{
             right: 0;
         }
     </style>
     <script src="move.js"></script>
 </head>
 <body>
     <div id="wrap">
         <ul id="box">
             <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/4.jpg"></li>
             <li><img src="img/5.jpg"></li>
         </ul>
         <ol id="btn">
             <li class="active"></li>
             <li></li>
             <li></li>
             <li></li>
             <li></li>
         </ol>
         <a id="prev" href="javascript:;">←</a>
         <a id="next" href="javascript:;">→</a>
     </div>
 </body>
 </html>
 <script>
     window.onload = function(){
         var oWrap = document.getElementById("wrap");
         var oBox = document.getElementById("box");
         var aBox = oBox.getElementsByTagName("li");
         var aBtn = document.getElementById("btn").getElementsByTagName("li");
         var oPrev = document.getElementById("prev");
         var oNext = document.getElementById("next");
         var iNow = 0;
         var timer = null;

         oBox.innerHTML += oBox.innerHTML;
         oBox.style.width = aBox[0].offsetWidth * aBox.length + "px";
         oBox.style.width = aBox[0].offsetWidth*aBox.length +"px";

         //红色按钮的样式
         function tab(){
             for(var i=0;i<aBtn.length;i++){
                 aBtn[i].className = "";
             }
             move(oBox,{left:-aBox[0].offsetWidth*iNow});
             aBtn[iNow].className = "active";
         }
         //下一张(神逻辑在此,擦汗!!希望访客给出更好建议)
         function next(){
             if(iNow==aBox.length/2){
                 oBox.style.left = 0;
                 iNow = 0;
             }
             for(var i=0;i<aBtn.length;i++){
                 aBtn[i].className = "";
             }
             iNow++;
             var iNew = iNow;
             if(iNew == aBtn.length) iNew = 0;
             aBtn[iNew].className = "active";
             move(oBox,{left:-aBox[0].offsetWidth*iNow});
         }

         //红色圆钮得点击效果
         for(var i=0;i<aBtn.length;i++){
             aBtn[i].index = i;
             aBtn[i].onclick = function(){
                 iNow = this.index;
                 tab();
             }
         }
         //上一张(与“上一张”一样的神逻辑!!)
         oPrev.onclick = function(){
             if(iNow<=aBox.length/2 - 1){
                 iNow+=5;
                 oBox.style.left = -aBox[0].offsetWidth*iNow + "px";
             }
             for(var i=0;i<aBtn.length;i++){
                 aBtn[i].className = "";
             }
             iNow--;
             var iNew = iNow-5;
             if(iNew == -1) iNew = aBtn.length-1;
             aBtn[iNew].className = "active";
             move(oBox,{left:-aBox[0].offsetWidth*iNow});
         }
         oNext.onclick = next;
         clearInterval(timer);
         timer = setInterval(next,2000);
         oWrap.onmouseout = function(){
             timer = setInterval(next,2000);
         }
         oWrap.onmouseover = function(){
             clearInterval(timer);
         }
     }
 </script>

带无缝滚动的轮播图(含JS运动框架)的更多相关文章

  1. 带无缝滚动的轮播图(含JS运动框架)-简洁版

    昨天写的神逻辑,今天终于解决,经过大家的商讨,终于研究出来一套简单的代码!!! js代码如下: <script> window.onload = function() { var oWra ...

  2. 轮播图采用js、jquery实现无缝滚动和非无缝滚动的四种案例实现,兼容ie低版本浏览器

    项目源代码下载地址:轮播图 以下为项目实现效果:(由于gif太大,所以只上传一张图片,但效果完全能实现,经测试,在ie各版本浏览器及chrome,firefox等浏览器中均能实现效果,可以实现点击切换 ...

  3. 用原生的javascript 实现一个无限滚动的轮播图

    说一下思路:和我上一篇博客中用JQ去写的轮播图有相同点和不同点 相同点: 首先页面布局是一样的 同样是改变.inner盒子的位置去显示不同的图片 不同点: 为了实现无限滚动需要多添加两张重复的图片 左 ...

  4. 轮播图原生js实现和jquery实现和js面向对象方式实现

    原生JS实现 html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  5. 029 Android 轮播图广告Banner开源框架使用

    1.Banner介绍 现在的绝大数app都有banner界面,实现循环播放多个广告图片和手动滑动循环等功能. 2.使用环境配置(具体可见github开源项目) (1)添加依赖 在build.gradl ...

  6. 简单介绍无限轮播图,js源代码

    无限轮播图js源代码,今天介绍一下用js简单的编写无限轮播图 <!DOCTYPE html> <html>   <head>     <meta charse ...

  7. javascript写无缝平移的轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 用jquery实现带左右按键的轮播图

    成品如下: 简单来说就是点击“右”按钮时,转换到右边的下一幅图片,同时上面的小方块颜色也跟着改变,如果已经是最后一幅图片,再点击“右”,则转换到第一幅图片,是直接向左移找到第一幅图的,明天再做一下无缝 ...

  9. 基于Swiper 2.7.6实现的带缩略图功能的轮播图

    非原创,只能适合PC端,如果是移动端,只需要修改界面的大小即可.界面如下: 链接:http://pan.baidu.com/s/1pK9XdUV 密码:jsyk

随机推荐

  1. SDK截图(三):压缩位图之理论准备篇

    压缩位图我们使用简单的行程长度编码的方法,详情参考<windows程序设计>15章之DIB压缩. 在BITMAPINFOHEADER结构中有两个和位图压缩有关的字段,分别是biCompre ...

  2. Qt MainWindow结构

    (图自:FinderCheng 的 Qt 学习之路(11): MainWindow)

  3. Please allow Subclipse team to receive anonymous usage statistics for this Eclipse intance(info)

    本文转载自:http://blog.csdn.net/myfxx/article/details/21096949 今天在用eclipse启动项目的时候发现了一个问题,就是每次启动项目的时候,ecli ...

  4. 写一些封装part1 (事件绑定移除,圆形矩形碰撞检测)

    var EventHandle = { addEvent:function(ele,type,handle){ if (ele.addEventListener) { ele.addEventList ...

  5. JavaScript知识点

    Day 01 1.Javascript 概述 1.什么是Javascript (JS) Javascript 是一种运行于 JS解释器/引擎 中的解释型脚本语言 JS解释器/引擎 :JS运行环境 1. ...

  6. Java注释

    注释:用于注解说明解释程序的文字.提高了代码的阅读性. 一:单行注释 "//注释文字" 二:多行注释 "/*注释文字*/" 三:文档格式 "/**注释 ...

  7. Python使用re模块正则式的预编译及pickle方案

    项目上线要求当中有言论和昵称的过滤需求, 客户端使用的是python脚本, python脚本中直接利用re模块来进行正则匹配, 一开始的做法是开启游戏后, 每帧编译2条正则式, 无奈运营需求里面100 ...

  8. 修复FreeBSD上的ufs文件系统

    昨天在两台FreeBSD上配置好Heartbeat服务(两台机器是用网线连通的,做为Heartbeat的两个节点),启动服务时Heartbeat检测到crmd守护进程没起来,于是它就尝试重启两台机器以 ...

  9. TFS下的源代码控制

    以下主要描述了: TFS源代码控制系统的基本场景 如何把一个项目添加到源代码管理中 如何与服务器同步 如何做Check-In 如何做分支与合并 什么是上架与下架 我们知道工作项是项目管理的基本元素,但 ...

  10. 关于使用微信登录第三方APP的实现(Android版)

    使用微信登录APP,免去注册过程,现在已经有很多的类似应用了.集成该功能过程不复杂,但还是有一些地方需要注意的. 开始之前,需要做下面的准备工作. 1.到微信开放平台注册你的APP,并申请开通微信登录 ...