Web前端原生JavaScript浅谈轮播图

1、一直来说轮播图都是困扰刚进业内小白的一大难点,因为我们不仅需要自己作出一个比较完美的运动框架(虽然网上一抓一大把,但是哪有比自己做出来实现的有成就感,不是吗?^_^),还必须需要非常关键性的把握住轮播的原理,这样才能把一个轮播图完美的呈现出来。

2、废话不多说,请看下面代码

 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 //开始封装运动框架
12 function move(obj,json,fn){
13     clearInterval(obj.timer)
14     obj.timer =setInterval(function(){
15         var bStop = true;
16         for(var attr in json){
17             var initialVal = 0;
18             if(attr == "opacity"){
19                 initialVal = parseInt(parseFloat(getStyle(obj,attr))*100);
20             }else{
21                 initialVal = parseInt(getStyle(obj,attr));
22             }
23             var speed = (json[attr]-initialVal)/8;
24             speed = speed>0?Math.ceil(speed):Math.floor(speed);
25             if(initialVal != json[attr]){
26                 bStop = false;
27             }
28             if(attr == "opacity"){
29                 obj.style.opacity = (initialVal+speed)/100;
30                 obj.style.filter = "alpha(opacity:"+(initialVal+speed)+")";
31             }else{
32                 obj.style[attr] = initialVal+speed+"px";
33             }
34             if(bStop){
35                 clearInterval(obj.timer);
36                 fn && fn();
37             }
38         }
39     },30)
40 }
41 //上面一个运动框架就做好了,现在只需要我们调用即可,当然这种类型的框架还不是最完美的,有些功能还无法实现,所以我上面一直说比较完美,但这已经足够用啦...

第二步: 轮播图

 1 <!--首先我们来写一个简单的html和css-->
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
 7     <title>Document</title>
 8     <style type="text/css">
 9         *{padding: 0;margin: 0}
10         #banner{
11             width:     800px;
12             height:400px;
13             position: relative;
14             margin: 50px auto;
15             overflow: hidden;
16         }
17         #banner>ul{
18             position: absolute;
19         }
20         #banner>ul>li{
21             float: left;
22             list-style: none;
23         }
24         #banner>ul>li>img{
25             width:800px;
26             height: 400px;
27             border-radius: 15px;
28         }
29
30         #cut>a{
31             width: 80px;
32             height: 40px;
33             background:rgba(228,23,221,0.5);
34             ;border-radius: 10px;
35             text-decoration: none;
36             text-align: center;
37             font-weight: bold;
38             font-size: 30px;
39             color: pink;
40             position: absolute;
41             top:180px;
42             display: block;
43             line-height: 40px;
44         }
45         #cut>a:nth-child(2){
46             right:0;
47         }
48
49         #btn{
50             position: absolute;
51             top: 350px;
52             left: 350px;
53         }
54         #btn>a{
55             width: 20px;
56             height: 20px;
57             border-radius: 50%;
58             background:yellowgreen;
59             margin-right:6px;
60             float: left;
61         }
62         #btn>.active{background:yellow;}
63     </style>
64 </head>
65 <body>
66     <div id="banner">
67         <ul>
68             <li><img src="images/1.jpg"></li>
69             <li><img src="images/2.jpg"></li>
70             <li><img src="images/3.jpg"></li>
71             <li><img src="images/4.jpg"></li>
72             <li><img src="images/5.jpg"></li>
73         </ul>
74         <div id="cut">
75             <a href="##"><</a>
76             <a href="##">></a>
77         </div>
78         <div id="btn">
79             <a href="##" class="active"></a>
80             <a href="##"></a>
81             <a href="##"></a>
82             <a href="##"></a>
83             <a href="##"></a>
84         </div>
85     </div>
86 </body>
87 </html>
88 <!--上面我的一个简单的布局,我就不多说了,下面请看我们的关键轮播图吧-->

无缝轮播图---> 当我们拿到需求时,我们会要立马想到无缝轮播是一种图片从左至右的滑动式切换,那肯定是通过切换ul(按我上述的HTML来说)的left值从而达到效果的,请看下面代码

 1 var oBan =document.getElementById("banner");
 2 var oli =oBan.getElementsByTagName("li");
 3 var oul= oBan.getElementsByTagName("ul")[0];
 4 var index = 0;
 5 var timer = null;
 6
 7 //想要实现无缝轮播,关键就是使用一种偷梁换柱的障眼法去掩盖用户的视觉差
 8 var li =oli[0].cloneNode(true);
 9 oul.appendChild(li);
10
11 //为了方便以后的代码维护
12 var iw =oli[0].offsetWidth;
13 oul.style.width =iw*oli.length+"px";
14
15 //轮播原理
16 function cutImg(){
17     move(oul,{left:-index*iw});
18     //当图片切换时,需要下面的小店同步进行切换
19     for(var i = 0;i<oBtn.length;i++){
20         oBtn[i].className = "" ;
21     }
22     oBtn[index>oBtn.length-1?0:index].className = "active";
23 }
24
25 //轮播的自动播放
26 function autoP(){
27     //这一步的目的在于当图片处于最后一张图时,我们怎么通过一个障眼法使图片变成我们想要的下一张图
28     timer=setInterval(function(){
29         if(index == oli.length-1){
30            index = 1;
31            oul.style.left = 0;
32         }else{
33            index++
34         }
35         cutImg()
36     },3000)
37 }
38 autoP()
39
40 //当我们鼠标移上时,轮播停止,鼠标移开轮播继续
41     oBan.onmouseover = function(){
42         clearInterval(timer);
43     }
44     oBan.onmouseout = function(){
45        autoP();
46     }
47
48     // 轮播图中的点击小点图片切换
49     var oBtn = document.getElementById("btn").getElementsByTagName("a");
50     for(var i = 0;i<oBtn.length;i++){
51        oBtn[i].onclick = function(){
52            oBtn[i].iNow = i;
53            for(var j = 0;j<oBtn.length;j++){
54                oBtn[j].className = "";
55            }
56            this.className ="active" ;
57            move(oul,{left:-this.iNow*iw})
58        }
59     }
60
61    // 轮播图中左右切换按钮切换
62     var oCut =document.getElementById("cut").getElementsByTagName("a");
63     //点击右边按钮切换到第一张图时,我们下一步想要得到的倒数第二张图
64     oCut[1].onclick = function(){
65          if(index == oli.length-1){
66            index = 1;
67            oul.style.left = 0;
68         }else{
69            index++
70         }
71         cutImg()
72     }
73
74
75     oCut[0].onclick = function(){
76         if(index == 0){
77            index = oli.length -2;
78            oul.style.left = -(oli.length-1)*iw;
79         }else{
80            index--;
81         }
82          cutImg()
83     }
84
85     //这样一个无缝轮播图就做好啦!!

上面是我对轮播图的一个基本构思和大致框架,希望融合大家各位技术大牛们的思想加以优化,谢谢大家。。。。

原文地址:https://www.cnblogs.com/kevinTangwen/p/Kevin.html

时间: 2024-10-12 03:52:22

Web前端原生JavaScript浅谈轮播图的相关文章

浅谈轮播图(原生JavaScript实现)

现在各种轮播图插件,玲琅满目,用起来也非常方便,通常只需要选择元素然后传入参数就可以了.但是,和授人以鱼不如授人以渔一样的道理,不管怎样最基本的轮播图原理还是应当掌握的.这样不仅有利于我们自己写出来满足自己要求的轮播图,同时也对我们更好的使用其他插件有帮助.当然,最重要的是扎实我们的JavaScript基本功! 切入正题. 轮播,顾名思义,就是图片的循环"播放".播放可以自动(定时器)也可以手动(按钮).轮播的精要其实是切换,切换可以是上下左右不同方向的移动来实现切换,移动可以匀速小步

纯原生javascript仿网易轮播图

第一次有自己的关于代码的博客,感到诚惶诚恐.这可能是我第一次以程序猿,或者连初级程序猿都不是的身份下开通的个人“技术”(胡写乱写)博客园地.闲言碎语不要讲,咱今天就写一点关于js的代码吧.网易首页大家肯定都去过,在首页左侧部分有个轮播图,效果很好,构思精巧,非常诱人.注,此demo非本人原创,在这里进行个人解读,力求通俗易懂(主要是让我自己明白!). 那么如何实现相关技术,进而实现如图效果呢?下面的进度条是用JQuery写的,这里暂不考虑.下面从三个方面讨论网一轮播图. 一.HTML部分 1 <

原生JavaScript实现无缝轮播图

无缝轮播图是页面常用的特效之一,然而在实际的开发过程中,大部分的开发者都会使用插件来对轮播图进行开发,那么它的底层到底是怎么实现的呢,本文章将围绕这一问题展开探讨. 在讨论如何利用原生JS实现图片之间无缝切换轮播的动画效果之前,我们先来谈谈无缝轮播图片的css布局. 首先我们需要一个用来显示图片的DIV容器,然后把想要轮播的图片没有缝隙的排成一行放入DIV容器中,给DIV容器设置 overflow: hidden,这样在页面中就可以只看到一张图片,然后通过利用JS来移动ul的left值就能达到无

原生javascript之实战 轮播图

成品效果如下图所示: 因为博客园限制图片上传大小被我删了一些帧数,所以图片看起来会有一点卡,现实运行是不会的 搭建HTML和CSS结构 HTML代码如下: 1 <div class="wrapper"> 2 <ul class="sliderPage"> 3 <li> 4 <img src="images/1.jpg"> 5 </li> 6 <li> 7 <img sr

原生JS实现简易轮播图

原生JS实现简易轮播图(渐变?) 最近做网页总是会用到轮播图,我就把之前写的轮播图单独拿出来吧,如果有...如果真的有人也需要也可以复制去用用啊..哈~.. window.onload = function() { var tab = 0; var loop_imgs = new Array("img/l1.jpg", "img/l2.jpg", "img/l3.jpg", "img/l4.jpg", "img/l5

原生 js 左右切换轮播图

使用方法: 可能很多人对轮播图感兴趣,下面奉上本人的 原生 js 轮播代码复制 js 到页面的最底部,样式在 css 里改,js 基本不用动,有什么不懂的可以 加本人 QQ172360937 咨询 或者留言都可以,这个是用 原生写的 轮播图,样式可以写自己喜欢的样式,什么都不用改,只改变样式就行,页面结构的id 要与js的相对应li随便加.li 随便加的意思就是说你可以加无数个图片.每个li 里装一个图片,或者是其他什么元素, <!doctype html> <html lang=&qu

photoSlider-html5原生js移动开发轮播图-相册滑动插件

简单的移动端图片滑动切换浏览插件 分别引用css文件和js文件 如: <link rel="stylesheet" type="text/css" href="css/photoSlider.min.css" /> <script src="js/photoSlider.min.js" type="text/javascript" charset="utf-8">

JavaScript实现的轮播图

当初学习JavaScript的时候,想学习轮播图是怎么写的,结果在百度搜了半天也很难搜出一个完整的轮播图案例.现在就分享一个用js写的轮播图供大家参考和学习,有什么错误的地方或有更好的方法也请大家提出来,共同讨论和进步. 下面是效果图. <div id="play"> <ol>  //按钮 <li class="active">1</li> <li>2</li> <li>3</

JavaScript实现简单轮播图动画

运行效果: 源代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>轮播图</title> </head> <style type="text/css"> * { margin: 0px; padding: 0px } #container { margin: