js无缝轮播 和淡入淡出轮播

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        *{margin:0;padding:0;}
        ul,li{
            list-style: none;
        }

        #banner{
            width: 800px;
            height: 400px;
            margin: 30px auto;
            position: relative;
            overflow: hidden;
        }
        #banner>ul{
            position: absolute;
        }
        #banner>ul>li{
            float: left;
            width: 800px;
            height: 400px;
        }

        #banner>#dir>a{
            width: 80px;
            height: 40px;
            position: absolute;
            text-align: center;
            line-height: 40px;
            text-decoration: none;
            color: #fff;
            background: rgba(0,0,0,.5);
            top: 50%;
            margin-top: -20px;

        }

        #banner>#dir>a:nth-child(2){
            right: 0;
        }

        #btn{
            position: absolute;
            bottom: 10px;
            width: 120px;
            left: 50%;
            margin-left: -60px;
        }

        #btn>a{
            float: left;
            width: 15px;
            height: 15px;
            background: #000;
            border-radius: 50%;
            margin-left: 10px;
        }

        #btn>.active{
            background: #c33;
        }
    </style>
</head>
<body>
    <div id="banner">
        <ul>
            <li><img src="img/1.png"></li>
            <li><img src="img/2.png"></li>
            <li><img src="img/3.png"></li>
            <li><img src="img/4.png"></li>
        </ul>
        <div id="dir">
            <a href="##">&lt;</a>
            <a href="##">&gt;</a>
        </div>
        <div id="btn">
            <a href="##" class="active"></a>
            <a href="##"></a>
            <a href="##"></a>
            <a href="##"></a>
        </div>
    </div>
</body>
</html>
<script src="../../pool.js"></script>
<script>
var oBanner = document.getElementById("banner");
var oUl = document.querySelector("#banner>ul");
var aLi = oUl.getElementsByTagName("li")
var aDir = document.querySelectorAll("#dir>a");
var aBtn = document.querySelectorAll("#btn>a");
var iNow = 0;
var iWidth = aLi[0].offsetWidth;
var li = aLi[0].cloneNode(true);
oUl.appendChild(li);
oUl.style.width = iWidth * aLi.length+"px";
var timer = null;

for(var i=0;i<aBtn.length;i++){
    aBtn[i].index = i;
    aBtn[i].onmouseover = function(){
        for(var j=0;j<aBtn.length;j++){
            aBtn[j].className = ""
        }

        this.className = "active";
        iNow = this.index;
        toImg();
    }

}

aDir[0].onclick = function(){
    if(iNow == 0){
        iNow = aLi.length-2;
        oUl.style.left = -(aLi.length-1)*aLi[0].offsetWidth+"px";

    }else{
        iNow--;
    }

    toImg();

}

aDir[1].onclick = function(){
    if(iNow == aLi.length-1){
        iNow = 1;
        oUl.style.left = 0;
    }else{
        iNow++;
    }

    toImg();
}

//做轮播图之前一定要先做一个鼠标移入停止轮播 移除继续轮播
oBanner.onmouseover = function(){
    clearInterval(timer)
}

oBanner.onmouseout = function(){
    autoPlay()
}

autoPlay()
function autoPlay(){
    timer = setInterval(function(){
        if(iNow == aLi.length-1){
            iNow = 1;
            oUl.style.left = 0;
        }else{
            iNow++;
        }

        toImg();
    },3000)
}

//轮播的原理
function toImg(){
    move(oUl,{left:-iNow*iWidth})

    for(var i=0;i<aBtn.length;i++){
        aBtn[i].className = "";
    }

    aBtn[iNow==aLi.length-1?0:iNow].className = "active";
}
</script>
/*
完美运动框架
 */
function move(obj,json,fn){
    //防止多次点击   关闭掉上一个定时器
    clearInterval(obj.timer);
    //开启定时器  obj.timer:防止多个对象抢定时器
    obj.timer = setInterval(function(){
        //开关门
        var bStop = true;
        //传入的是一个对象 需要将对象中所有的值进行遍历
        for(var attr in json){
            /*
                因为offset的局限性太大,如果想要这个方法灵活多用只能用获取非行间样式

                考虑2点
                    1、透明度是小数 不能够直接取整需要先*100在取整

                    2、因为getStyle()获取出来的是字符串 我们需要将它转换为数字
             */
            var iCur = 0;
            if(attr == "opacity"){
                iCur = parseInt(getStyle(obj,attr)*100);
            }else{
                iCur = parseInt(getStyle(obj,attr));
            }

            /*
            因为要做缓存运动,因此需要计算速度 速度是一个不定值
            公式:  (目标值 - 当前对象的位置) /系数  建议是8

            考虑的问题:
                计算机处理小数有问题因此需要将小数干掉,我们要进行向上取整和向下取整
             */
            //算速度
            var speed = (json[attr] - iCur)/8;
            speed = speed>0?Math.ceil(speed):Math.floor(speed);

            /*判断是否都已经到达终点 只要有一个没有到达终点就将bStop为false  循环完毕以后判断bstop来决定关闭定时器*/
            if(json[attr] !=iCur){
                bStop = false;
            }

            /*
                考虑2部分
                    1、透明度是不需要加px的因此需要单独判断
                    2、普通的属性是需要加px的因此需要再次判断

             */
            if(attr == "opacity"){
                //透明度的兼容性
                obj.style.opacity = (iCur+speed)/100;
                obj.style.filter = "alpha(opacity:"+(iCur+speed)+")";
            }else{
                obj.style[attr] = (iCur+speed)+"px";
            }
        }

        //当循环完毕以后 判断bStop的状态来决定是否关闭定时器
        if(bStop){
            clearInterval(obj.timer);
            //链式操作
            fn&&fn();
        }

    },30)
}
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>

        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }

            ul,
            li {
                list-style: none;
            }

            #banner {
                width: 800px;
                height: 400px;
                margin: 30px auto;
                position: relative;
                overflow: hidden;

            }

            #banner>ul>li {
                position: absolute;
                width: 800px;
                height: 400px;
                opacity: 0;
            }

            #banner>ul>li:nth-child(1) {
                opacity: 1
            }

            #banner>#dir>a {
                width: 80px;
                height: 40px;
                position: absolute;
                text-align: center;
                line-height: 40px;
                text-decoration: none;
                color: #fff;
                background: rgba(0, 0, 0, .5);
                top: 50%;
                margin-top: -20px;

            }

            #banner>#dir>a:nth-child(2) {
                right: 0;
            }

            #btn {
                position: absolute;
                bottom: 10px;
                width: 120px;
                left: 50%;
                margin-left: -60px;
            }

            #btn>a {
                float: left;
                width: 15px;
                height: 15px;
                background: #000;
                border-radius: 50%;
                margin-left: 10px;
            }

            #btn>.active {
                background: #c33;
            }

        </style>
    </head>

    <body>
        <div id="banner">
            <ul>
                <li><img src="img/1.png"></li>
                <li><img src="img/2.png"></li>
                <li><img src="img/3.png"></li>
                <li><img src="img/4.png"></li>
            </ul>
            <div id="dir">
                <a href="##">&lt;</a>
                <a href="##">&gt;</a>
            </div>
            <div id="btn">
                <a href="##" class="active"></a>
                <a href="##"></a>
                <a href="##"></a>
                <a href="##"></a>
            </div>
        </div>
    </body>

</html>
<script src="js/pool.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
    var aLi = document.querySelectorAll("#banner>ul>li");

    //小圆点动态添加
    var big_box = document.getElementById("banner");

    var btnlist = document.getElementById("btn");
    var aUl = document.getElementsByTagName("ul")[0];

    var aDir = document.querySelectorAll("#dir>a");

    var abtn = document.querySelectorAll("#btn>a");

    var iNow = 0;
    var iNext = 0;
    var timer = null;

    aDir[0].onclick = function() {
        if(iNext == 0) {
            iNext = aLi.length - 1;
        } else {
            iNext--;
        }
        toimg();
    }
    aDir[1].onclick = function() {
        if(iNext == aLi.length - 1) {
            iNext = 0;
        } else {
            iNext++;
        }
        toimg();
    }

    big_box.onmousemove = function() {
        clearInterval(timer);
    }
    big_box.onmouseout = function() {
        autoPlay();
    }

autoPlay();

    function autoPlay() {
        timer = setInterval(function() {
            if(iNext == aLi.length - 1) {
                iNext = 0;
            } else {
                iNext++;
            }
            toimg();
        }, 2000)
    }

    function toimg() {
        move(aLi[iNow], {
            opacity: 0
        })
        move(aLi[iNext], {
            opacity: 100
        })
        iNow = iNext;
        for(var i = 0; i < abtn.length; i++) {

            abtn[i].className = "";
        }
        abtn[iNext].className = "active";
    }

//下面的小圆点
    for(var i = 0; i < abtn.length; i++) {
        abtn[i].index = i;
        abtn[i].onmouseover = function() {
            for(var j = 0; j < abtn.length; j++) {
               abtn[j].className = "";
            }

            this.className = "active";
            //iNow = iNext;
            iNext =this.index;
            console.log(iNow);
            console.log(iNext);
            toimg();
        }

    }
</script>

原文地址:https://www.cnblogs.com/carolavie/p/9533443.html

时间: 2024-11-08 20:19:40

js无缝轮播 和淡入淡出轮播的相关文章

轮播图淡入淡出的js和jquery的效果

图片轮播(淡入淡出)--js原生和jquery实现 图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为封装了很多用法,所以用起来就简单许多,转换成js使用,其实也就是用js原生模拟出这些用法. 但不管怎样,构造一个最基本的表现层是必须的简单的图片轮播一般由几个部分构成. 对于淡入淡出式 1.首先是个外围部分(其实也就是最外边的整体wrapper) 2.接着就是你设置图片轮播的地方(也就是一个banner吧) 3.然后是一个图片组(可以用新的di

图片切换(非轮播,淡入淡出)--变形金刚joy007 项目总结

图片切换(非轮播,淡入淡出) 1.切换2.停止 <html> <head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> <style type="text/css"> div{ position: absolute; left: 0px; top: 0px;} .div1{ width: 800px; hei

jQuery淡入淡出轮播图实现

大家好我是QD小白,这是人生第一次写博客,准备写的内容是Jquery淡入淡出轮播图实现,在此之前学习JS写的轮播图效果都感觉不怎么好,学习了jQuery里的淡入淡出效果后又写了一次轮播图效果明显感觉好了许多.现在我就来分享下自己写轮播图的思路和方法. HTML部分: <div id="img-box" style="width:700px; height:350px;"> <img style="opacity: 1;" wid

Jquery淡入淡出轮播图

Jquery淡入淡出轮播图 因为代码不多所以我就写一个html文件里了 html代码 <div class="banner"> <ul> <li><a href="javascript:;"><img src="./1 (1).png" /></a></li> <li><a href="javascript:;"><

js实现多个图片淡入淡出,框架

单个淡入淡出已经写过,可以看看上几遍的博文 <style> *{ margin:0; padding:0; } div{ height:100px; width:100px; background:red; margin:0 auto; margin-bottom:5px; filter:alpha(opacity:30); opacity:0.3; } </style> <body> <div></div> <div></di

首页大屏广告效果 jquery轮播图淡入淡出

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery个性化图片轮播效果</title> <script src="js/jquery.js" type="text/javascript"></script> <link rel=

jq交叉淡入淡出轮播图

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style type="text/css"> 7 *{ 8 padding:0; 9 margin:0; 10 } 11 ul,ol{ 12 list-style:

淡入淡出轮播图

<!DOCTYPE html><html><head><style type="text/css"> body{background:#57beb9;}/* main */#main{width:920px;height:430px;overflow:hidden;position:relative;margin:30px auto;}#main .box{width:820px;height:430px;box-shadow:0px 0

jQuery实现图片伦播效果(淡入淡出+左右切换)

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style type="text/css"> 7 *{ 8 margin: 0; 9 padding: 0; 10 } 11 ul li { 12 list-style: none; 13 } 14 a{ 15 text-