带无缝滚动的轮播图(含JS运动框架)

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

js运动框架的代码如下:

 1 //获取样式
 2 function getStyle(obj,attr){
 3     if(obj.currentStyle){
 4         return obj.currentStyle[attr];
 5     }else{
 6         return getComputedStyle(obj,false)[attr];
 7     }
 8 }
 9
10 //运动框架
11 //complete:time,ease,fn
12 function move(obj,json,complete){
13     var dis = {};
14     var start = {};
15     for(var name in json){
16         start[name] = parseInt(getStyle(obj,name));
17         dis[name] = json[name] - start[name];
18     }
19     complete = complete || {};
20     complete.time = complete.time || 1000;
21     complete.ease = complete.ease || "ease-in";
22
23     var count = Math.floor(complete.time/30);
24     var n = 0;
25     clearInterval(obj.timer);
26     obj.timer = setInterval(function(){
27         n++;
28         for(var name in json){
29             switch (complete.ease){
30                 case "linear":
31                     var a = n/count;
32                     var cur = start[name] + dis[name]*a;
33                     break;
34                 case "ease-in":
35                     var a = n/count;
36                     var cur = start[name] + dis[name]*a*a*a;
37                     break;
38                 case "ease-out":
39                     var a = 1 - n/count;
40                     var cur = start[name] + dis[name]*(1-a*a*a);
41                     break;
42             }
43
44             if(name == "opacity"){
45                 obj.style.opacity = cur;
46                 obj.style.filter = "alpha(opacity="+cur*100 +")";
47             }else{
48                 obj.style[name] = cur + "px";
49             }
50         }
51
52         if(n == count){
53             clearInterval(obj.timer);
54             if(complete.fn) complete.fn();
55         }
56     },30)
57 }

运行的效果图如下:

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

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

  1 <!DOCTYPE HTML>
  2 <html>
  3 <head>
  4     <title></title>
  5     <style>
  6         *{
  7             margin: 0;
  8             padding: 0;
  9         }
 10         #wrap{
 11             width: 590px;
 12             height: 340px;
 13             margin:100px auto;
 14             position: relative;
 15             overflow: hidden;
 16         }
 17         #box{
 18             position: absolute;
 19             left: 0;
 20             top: 0;
 21         }
 22         #box li{
 23             width: 590px;
 24             height: 340px;
 25             list-style: none;
 26             float: left;
 27         }
 28         #btn{
 29             position: absolute;
 30             left: 50%;
 31             margin-left:-100px ;
 32             bottom: 20px;
 33         }
 34         #btn li{
 35             width: 30px;
 36             height:30px;
 37             border-radius: 50%;
 38             background: #ccc;
 39             float: left;
 40             list-style: none;
 41             margin-right: 10px;
 42         }
 43         #btn li.active{
 44             background: red;
 45         }
 46         #wrap a{
 47             display: block;
 48             width: 50px;
 49             height: 50px;
 50             background: rgba(0,0,0,0.5);
 51             position: absolute;
 52             top: 145px;
 53             color: #fff;
 54             text-decoration: none;
 55             line-height: 50px;
 56             text-align: center;
 57         }
 58         #prev{
 59             left: 0;
 60         }
 61         #next{
 62             right: 0;
 63         }
 64     </style>
 65     <script src="move.js"></script>
 66 </head>
 67 <body>
 68     <div id="wrap">
 69         <ul id="box">
 70             <li><img src="img/1.jpg"></li>
 71             <li><img src="img/2.jpg"></li>
 72             <li><img src="img/3.jpg"></li>
 73             <li><img src="img/4.jpg"></li>
 74             <li><img src="img/5.jpg"></li>
 75         </ul>
 76         <ol id="btn">
 77             <li class="active"></li>
 78             <li></li>
 79             <li></li>
 80             <li></li>
 81             <li></li>
 82         </ol>
 83         <a id="prev" href="javascript:;">←</a>
 84         <a id="next" href="javascript:;">→</a>
 85     </div>
 86 </body>
 87 </html>
 88 <script>
 89     window.onload = function(){
 90         var oWrap = document.getElementById("wrap");
 91         var oBox = document.getElementById("box");
 92         var aBox = oBox.getElementsByTagName("li");
 93         var aBtn = document.getElementById("btn").getElementsByTagName("li");
 94         var oPrev = document.getElementById("prev");
 95         var oNext = document.getElementById("next");
 96         var iNow = 0;
 97         var timer = null;
 98
 99         oBox.innerHTML += oBox.innerHTML;
100         oBox.style.width = aBox[0].offsetWidth * aBox.length + "px";
101         oBox.style.width = aBox[0].offsetWidth*aBox.length +"px";
102
103         //红色按钮的样式
104         function tab(){
105             for(var i=0;i<aBtn.length;i++){
106                 aBtn[i].className = "";
107             }
108             move(oBox,{left:-aBox[0].offsetWidth*iNow});
109             aBtn[iNow].className = "active";
110         }
111         //下一张(神逻辑在此,擦汗!!希望访客给出更好建议)
112         function next(){
113             if(iNow==aBox.length/2){
114                 oBox.style.left = 0;
115                 iNow = 0;
116             }
117             for(var i=0;i<aBtn.length;i++){
118                 aBtn[i].className = "";
119             }
120             iNow++;
121             var iNew = iNow;
122             if(iNew == aBtn.length) iNew = 0;
123             aBtn[iNew].className = "active";
124             move(oBox,{left:-aBox[0].offsetWidth*iNow});
125         }
126
127         //红色圆钮得点击效果
128         for(var i=0;i<aBtn.length;i++){
129             aBtn[i].index = i;
130             aBtn[i].onclick = function(){
131                 iNow = this.index;
132                 tab();
133             }
134         }
135         //上一张(与“上一张”一样的神逻辑!!)
136         oPrev.onclick = function(){
137             if(iNow<=aBox.length/2 - 1){
138                 iNow+=5;
139                 oBox.style.left = -aBox[0].offsetWidth*iNow + "px";
140             }
141             for(var i=0;i<aBtn.length;i++){
142                 aBtn[i].className = "";
143             }
144             iNow--;
145             var iNew = iNow-5;
146             if(iNew == -1) iNew = aBtn.length-1;
147             aBtn[iNew].className = "active";
148             move(oBox,{left:-aBox[0].offsetWidth*iNow});
149         }
150         oNext.onclick = next;
151         clearInterval(timer);
152         timer = setInterval(next,2000);
153         oWrap.onmouseout = function(){
154             timer = setInterval(next,2000);
155         }
156         oWrap.onmouseover = function(){
157             clearInterval(timer);
158         }
159     }
160 </script>
时间: 2024-10-24 22:40:27

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

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

昨天写的神逻辑,今天终于解决,经过大家的商讨,终于研究出来一套简单的代码!!! js代码如下: 1 <script> 2 window.onload = function() { 3 var oWrap = document.getElementById("wrap"); 4 var oBox = document.getElementById("box"); 5 var aBox = oBox.getElementsByTagName("li

JQuery仿最新淘宝网首页带箭头幻灯片,JQuery轮播图

JQuery代码 <script type="text/javascript"> $(function() { var $banner = $('.banner'); var $banner_ul = $('.banner-img'); var $btn = $('.banner-btn'); var $btn_a = $btn.find('a') var v_width = $banner.width(); var page = 1; var timer = null;

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

项目源代码下载地址:轮播图 以下为项目实现效果:(由于gif太大,所以只上传一张图片,但效果完全能实现,经测试,在ie各版本浏览器及chrome,firefox等浏览器中均能实现效果,可以实现点击切换图片,无缝滚动和非无缝滚动两种效果) 页面源代码:index.html(以下注释自行切换,为了项目清晰,所以用了四个js文件,分别实现不同的效果) <!DOCTYPE html> <html lang="zh-CN"> <head> <meta c

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

说一下思路:和我上一篇博客中用JQ去写的轮播图有相同点和不同点 相同点: 首先页面布局是一样的 同样是改变.inner盒子的位置去显示不同的图片 不同点: 为了实现无限滚动需要多添加两张重复的图片 左右切换和前面的方法有所不同,前面是获取当前的索引值乘以-600px当做位移距离,现在是需要获取当前.inner的位置来加上或者减去-600来实现 下面来一步步的去实现轮播图: 首先是html <!DOCTYPE html> <html lang="en"> <

轮播图---左右切换无长滚动效果轮播图-中级难度版

左右切换无长滚动轮播图思路:首先设有全局变量position(确定当前图片是第几张),arr数组:存放图片地址,方向:direction, 及lis小圆点数组,prev,记录小圆点的前一个, moveBool是否进入运动函数等1.点击事件:点击左边的leftBn,设置direction="right",position--,在这要确定position不能超出数组长度范围, 超出要重新赋值,点击小圆点把小圆点的当前是lis数组中的第几个赋值给position,然后图片生成2.图片生成:图

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

成品如下: 简单来说就是点击"右"按钮时,转换到右边的下一幅图片,同时上面的小方块颜色也跟着改变,如果已经是最后一幅图片,再点击"右",则转换到第一幅图片,是直接向左移找到第一幅图的,明天再做一下无缝切换的效果,即最后一幅图放完了以后第一幅图从右滑进来跟上.点击"左"同理. 下面是html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &

无限循环轮播图之JS部分(原生JS)

JS逻辑与框架调用 1 <script type="text/javascript"> 2 var oBox = document.getElementById('box'); 3 var oPrev = document.getElementById('prev'); 4 var oNext = document.getElementById('next'); 5 var oUl = oBox.children[0]; 6 var aLi = oUl.children;

仿淘宝轮播图 ,需要运动框架

<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <style> #div1 {width: 520px; height: 280px; border: 1px solid #000; margin

使用JS实现轮播图的效果

其中的一些css样式代码就省略了,下面只把结构层html.行为层js的代码展示出来 ,看代码说事. 一.简单的轮播图 <div class="box" id="box"> <div class="inner"> <ul> <li><a href="#"><img src="images/01.jpg" alt=""/>