JavaScript:100%原生js实现左右切换的轮播图(有延迟加载)

<!--说明:此.html文件必需有:(1)同级文件夹json,json文件夹下必需有文件data.txt,文件data.txt的内容为:   [{"imgSrc":"img/banner1.jpg"},    {"imgSrc":"img/banner2.jpg"},    {"imgSrc":"img/banner3.jpg"},    {"imgSrc":"img/banner4.jpg"}](2)同级文件夹img,img文件夹下必需有下列图片:banner1.jpg;banner2.jpg;banner3.jpg;banner4.jpg;-->
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title></title>    <style>        *{            margin:0;            padding:0;            list-style: none;        }        .box{            width: 1000px;            height: 300px;            position: relative;            margin:30px auto;            overflow: hidden;        }        .box .boxInner{            width: 4000px;            position: absolute;            left: 0;            top:0;        }        .box .boxInner div{            width: 1000px;            height: 300px;            float: left;            background: url("img/default.gif") no-repeat center #e1e1e1;        }        .box .boxInner div img{            width: 100%;            height: 100%;        }        .box ul{            position: absolute;            right:10px;            bottom:10px;        }        .box ul li{            width: 18px;            height: 18px;            background: #ccc;            border-radius: 50%;            margin-left: 10px;            float: left;            cursor: pointer;        }        .box ul li.on{            background: lightblue;        }        .box a{            width: 30px;            height: 45px;            position: absolute;            top:127px;            background-image: url("img/pre.png");            opacity: 0.3;            filter:alpha(opacity=30);            display: none;        }        .box a:hover{            opacity: 1;            filter:alpha(opacity=100);        }        .box .btnLeft{            left:30px;            background-position: 0 0;        }        .box .btnRight{            right:30px;            background-position: -50px 0;        }

</style></head><body><div class="box" id="box">    <div class="boxInner">        <!--<div><img src="img/banner1.jpg" /></div>        <div><img src="img/banner2.jpg" /></div>        <div><img src="img/banner3.jpg" /></div>        <div><img src="img/banner4.jpg" /></div>-->    </div>    <ul>        <!--<li class="on"></li>        <li></li>        <li></li>        <li></li>-->    </ul>    <a href="javascript:;" class="btnLeft"></a>    <a href="javascript:;" class="btnRight"></a></div><div class="box box2" id="box2">    <div class="boxInner">        <!--<div><img src="img/banner1.jpg" /></div>        <div><img src="img/banner2.jpg" /></div>        <div><img src="img/banner3.jpg" /></div>        <div><img src="img/banner4.jpg" /></div>-->    </div>    <ul>        <!--<li class="on"></li>        <li></li>        <li></li>        <li></li>-->    </ul>    <a href="javascript:;" class="btnLeft"></a>    <a href="javascript:;" class="btnRight"></a></div><script>    function getCss(curEle,attr){        var val=null;        var reg=null;        if(getComputedStyle){//标准            val=getComputedStyle(curEle,false)[attr];        }else{//非标准            if(attr===‘opacity‘){                val=curEle.currentStyle.filter; //‘alpha(opacity=10)‘                reg=/^alpha\(opacity[=:](\d+)\)$/i;                return reg.test(val)?reg.exec(val)[1]/100:1;            }            val=curEle.currentStyle[attr];        }        reg=/^[+-]?((\d|([1-9]\d+))(\.\d+)?)(px|pt|rem|em)$/i;        return reg.test(val)?parseInt(val):val;    }    function setCss(curEle,attr,value){        if(attr===‘float‘){            curEle.style.cssFloat=value;            curEle.style.styleFloat=value;            return;        }        if(attr===‘opacity‘){            curEle.style.opacity=value;            curEle.style.filter=‘alpha(opacity=‘+(value*100)+‘)‘;            return;        }        //对单位的处理        var reg=/^(width|height|top|right|bottom|left|((margin|padding)(top|right|bottom|left)?))$/i;        if(reg.test(attr)){            if(!(value===‘auto‘ || value.toString().indexOf(‘%‘)!==-1)){                value=parseFloat(value)+‘px‘;            }        }        curEle.style[attr]=value;    }    function setGroupCss(curEle,opt){        if(opt.toString()!==‘[object Object]‘) return;        for(var attr in opt){            this.setCss(curEle,attr,opt[attr]);        }    }    function css(curEle){        var arg2=arguments[1];        if(typeof arg2===‘string‘){            var arg3=arguments[2];            if(typeof  arg3===‘undefined‘){ //当第三个参数不存在,是获取;                return this.getCss(curEle,arg2);            }else{                this.setCss(curEle,arg2,arg3);            }        }        if(arg2.toString()===‘[object Object]‘){ //获取一组元素            this.setGroupCss(curEle,arg2);        }    }    function animate(curEle,target,duration){        function tmpEffect(t, b, c, d) {            return c * t / d + b;        }        //1.为公式的每个参数做准备        var begin={};        var change={};        for(var attr in target){            begin[attr]=css(curEle,attr);            change[attr]=target[attr]-begin[attr];        }        duration=duration||700;        var time=0;        //2.开启一个定时器,让时间不断累加;根据时间和公式,求出最新的位置;        clearInterval(curEle.timer); //开起一个定时器前,先关闭没用的定时器        curEle.timer=setInterval(function(){            time+=10;            //3.停止运动的条件(time>=duration)            if(time>=duration){                css(curEle,target);                clearInterval(curEle.timer);                return;            }            //拿到每个属性的最新值,并且赋值给元素对应的属性;            for(var attr in target){                var curPos=tmpEffect(time,begin[attr],change[attr],duration);                css(curEle,attr,curPos);            }        },10)    }    (function(){        //获取元素        var oBox=document.getElementById("box");        var oBoxInner=oBox.getElementsByTagName(‘div‘)[0];        var aDiv=oBoxInner.getElementsByTagName(‘div‘);        var aImg=oBoxInner.getElementsByTagName(‘img‘);        var oUl=oBox.getElementsByTagName(‘ul‘)[0];        var aLi=oUl.getElementsByTagName(‘li‘);        var oBtnLeft=oBox.getElementsByTagName(‘a‘)[0];        var oBtnRight=oBox.getElementsByTagName(‘a‘)[1];        var data=null;        var timer=null;        var step=0;        //1.获取并解析数据        getData();        function getData(){            var xml=new XMLHttpRequest;            xml.open(‘get‘,‘json/data.txt‘,false);            xml.onreadystatechange=function(){                if(xml.readyState==4 && /^2\d{2}$/.test(xml.status)){                    data=JSON.parse(xml.responseText);                }            };            xml.send();        }        //2.绑定数据        bind();        function bind(){            var strDiv=‘‘;            var strLi=‘‘;            for(var i=0; i<data.length; i++){                strDiv+=‘<div><img realImg="‘+data[i].imgSrc+‘" /></div>‘;                strLi+=i===0?‘<li class="on"></li>‘:‘<li></li>‘;                //通过判断,索引为0的,让其点亮,其他不用点亮            }            //注意:要把5个src都改成realImg;            strDiv+=‘<div><img realImg="‘+data[0].imgSrc+‘" /></div>‘;            //如果用字符串拼接的方式,插入页面,应该给innerHTML赋值;            //如果通过创建元素的方式,插入页面,应该给appendChild or insertBefore赋值;            oBoxInner.innerHTML+=strDiv;            oBoxInner.style.width=aDiv.length*aDiv[0].offsetWidth+‘px‘;            oUl.innerHTML+=strLi;        }        //3.延迟加载图片        setTimeout(lazyImg,500);        function lazyImg(){            for(var i=0; i<aImg.length; i++){                (function(index){                    var curImg=aImg[index];                    //1.创建一个图片对象                    var tmpImg=new Image;                    //2.给图片对象赋值正确的地址                    tmpImg.src=curImg.getAttribute(‘realImg‘);                    //3.校验地址                    tmpImg.onload=function(){                        curImg.src=this.src;                        tmpImg=null;                    }                })(i);            }        }        //4.图片自动轮播        timer=setInterval(autoMove,1400);        function autoMove(){            if(step>=aDiv.length-1){                step=0;                css(oBoxInner,‘left‘,0)            }            step++;            animate(oBoxInner,{left:-step*1000})            bannerTip();        }        //5.焦点自动轮播        function bannerTip(){            var tmpStep=step>=aLi.length?0:step;            for(var i=0; i<aLi.length; i++){                aLi[i].className=i==tmpStep?‘on‘:null;            }        }

//6.鼠标移入停止,移出继续        oBox.onmouseover=function(){            clearInterval(timer);            oBtnLeft.style.display=‘block‘;            oBtnRight.style.display=‘block‘;        };        oBox.onmouseout=function(){            timer=setInterval(autoMove,1400);            oBtnLeft.style.display=‘none‘;            oBtnRight.style.display=‘none‘;        };        //7.点击焦点手动切换        handleChange();        function handleChange(){            for(var i=0; i<aLi.length; i++){                aLi[i].index=i;                aLi[i].onclick=function(){                    step=this.index;                    animate(oBoxInner,{left:-step*1000});                    bannerTip();                }            }        }        //8.点击左右按钮手动切换        oBtnRight.onclick=autoMove;        oBtnLeft.onclick=function(){            if(step<=0){                step=aDiv.length-1;                css(oBoxInner,‘left‘,-step*1000);            }            step--;            animate(oBoxInner,{left:-step*1000});            bannerTip();        }    })();</script></body></html>
时间: 2024-10-12 12:05:24

JavaScript:100%原生js实现左右切换的轮播图(有延迟加载)的相关文章

JavaScript:100%原生js实现左右切换的轮播图(无延迟加载)

<!--说明:此.html文件必需有:(1)同级文件夹json,json文件夹下必需有文件data.txt,文件data.txt的内容为: [{"imgSrc":"img/banner1.jpg"}, {"imgSrc":"img/banner2.jpg"}, {"imgSrc":"img/banner3.jpg"}, {"imgSrc":"img/b

原生js实现移动端Touch轮播图的方法步骤

Touch 轮播图 touch轮播图其实就是通过手指的滑动,来左右切换轮播图,下面我们通过一个案例,来实现下. 1. html 结构 结构上,还是用ul.li来存放轮播图片,ol.li来存放轮播小圆点: 2. 样式初始化 html的一些标签,都会有一些默认样式,比如body标签默认是有一个边距的,为了不影响美观,我们需要清除掉. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /* 清除标签默认边距 */ body,ul,li,ol,im

JS原生带小白点轮播图

咱们刚刚说了js原生轮播图,现在给他加上可以随着一起走动的小圆点吧! css代码: *{ margin:0px; padding: 0px; } ul{ width: 2500px; height: 300px; position: absolute; } li{ float: left; list-style: none; } img{ width: 500px; height: 300px; } div{ width: 500px; height: 300px; margin: 50px a

学习笔记: js插件 —— SuperSlide 2 (轮播图插件,PC用)

SuperSlide 2  轮播图插件,较老.但还好用. 适用于PC,是绑定到jquery上的方法: $.slide(); 如果在实际中找不到.slide方法,请检查jquery等.js文件的引入次序.(另外切忌不要引入两次jquery.js,会把$的方法洗掉而导致失效的) http://www.superslide2.com/ 官网 http://www.superslide2.com/SuperSlide.2.1.2/jquery.SuperSlide.2.1.2.js jquery.Sup

js - 面向对象 - 小案例:轮播图、随机点名、选项卡、鼠标拖拽

面向对象 对象 : (黑盒子)不了解内部结构, 知道表面的各种操作. 面向对象 : 不了解原理的情况下 会使用功能 . 面向对象是一种通用思想,并非编程中能用,任何事情都能用. 编程语言的面向对象的特点: ? 封装 : 看不到里面的东西 , 用好表面功能. ? 继承 : 从父类继承一些方法 , 属性 , 子类又有一些新的特性. ? 多态 ? 抽象 : 抽取一个功能里面多个核心的功能模块. ? 思想: 高内聚.低耦合 ? 低耦合 :每个功能模块之间耦合度要低 ? 高内聚 :模块内部要紧密相连 面向

基于js的自适应、多样式轮播图插件(兼容IE8+、FF、chrome等主流浏览器)

插件github地址:https://github.com/pomelott/slider-plug_in 使用方式: slider plug-in 左右滑动的自适应.多样式全能插件.多次调用时只需传入最外层盒子ID即可. 1.根据html中的Dom结构引入图片. 2.引入css和js文件 3.调用pomeloSlider.doslide(obj) sliderwidth:轮播图宽度,单位为像素,默认自适应全屏. outer:最外层盒子ID,默认为"outer" time:轮播的时间间

原生js和jquery实现图片轮播特效

(1)首先是页面的结构部分 对于我这种左右切换式 1.首先是个外围部分(其实也就是最外边的整体wrapper) 2.接着就是你设置图片轮播的地方(也就是一个banner吧) 3.然后是一个图片组(可以用新的div 也可以直接使用 ul-->li形式) 4.然后是图片两端的左箭头和右箭头5.然后是一个透明背景层,放在图片底部 6.然后是一个图片描述info层,放在透明背景层的左下角(div 或 ul-->li) 7.然后是一个按钮层,用来定位图片组的index吧,放在透明背景层的右下角(div

原生js和jquery实现图片轮播

(1)首先是页面的结构部分 对于我这种左右切换式 1.首先是个外围部分(其实也就是最外边的整体wrapper) 2.接着就是你设置图片轮播的地方(也就是一个banner吧) 3.然后是一个图片组(可以用新的div 也可以直接使用 ul-->li形式) 4.然后是图片两端的左箭头和右箭头5.然后是一个透明背景层,放在图片底部 6.然后是一个图片描述info层,放在透明背景层的左下角(div 或 ul-->li) 7.然后是一个按钮层,用来定位图片组的index吧,放在透明背景层的右下角(div

js原生选项(包含无缝滚动轮播图)一

原生js选项卡的几种写法,整片文章我会由简及难的描述几种常用的原生选项卡的写法: Improve little by little every day! 1>基本选项卡: 思路:循环中先清除再添加,注意this的指向和自定义属性的应用 html代码: <div id="tab"> <input class="on" type="button" value="aaa"> <input type