淡入淡出轮播(衔接前面一片)

附上代码(其实脑瓜子疼)

/**
 * 淡入
 * @param element 待添加淡入动画效果的 DOM 元素对象
 * @param speed 限定运动的总时间
 * @param fn 在运动结束后需要继续执行的函数 
 */
function fadeIn(element, speed, fn) {
    element.style.display = "block";
    element.style.opacity = 0;
    animate(element, {opacity: 1}, speed, fn);
}

/**
 * 淡出
 * @param element 待添加淡出动画效果的 DOM 元素对象
 * @param speed 限定运动的总时间
 * @param fn 在运动结束后需要继续执行的函数 
 */
function fadeOut(element, speed, fn) {
    element.style.display = "block";
    element.style.opacity = 1;
    animate(element, {opacity: 0}, speed, function() {
        element.style.display = "none";
        fn && fn();
    });
}
<!-- 
    淡入淡出轮播的原理:
    将所有元素全都重叠在一起,并让第一张显示,其他图片隐藏
    当切换图片显示的时候,因为所有的img Dom元素可以选择得到
    所以,就可以使用元素节点列表操作元素,使得图片一张接一张
    的显示,经过js改变元素的opacity来改变元素的显示
 -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">
</head>

<style>
    *{
        margin: 0 ;
        padding: 0 ;
    }
    .container{
        width: 658px;
        height: 658px;
        border: 1px solid ;
        margin: 50px auto;
        position: relative;
    }
    /* 给父元素container设置定位,让子元素停靠 */
    ul{
        position: relative;
    }
    li{
        list-style: none;
    }
    ul li{
        position: absolute;
        display: none;
    }
    ol{
        position: absolute;
        height: 20px;
        width: 658px;
        background: rgba(0, 0, 0, 0.5);
        bottom:0px;
    }
    ol li{
        float: left;
        margin: 0 10px;
        cursor: pointer;
    }
    .show{
        color: #ad4;
    }   
    .container .btn .next,
    .container .btn .prev{
        position: absolute;
        z-index: 9;
        background: rgba(54, 32, 15, 0.5);
        width: 45px;
        height: 30px;
        text-align: center;
        line-height: 30px;
        font-size: 30px;
        cursor: pointer;
    } 
    .container .btn .next{
        right: 0px;
    }
</style>

<body>
    <div class="container">
        <ul>
            <li style="display:block;"><a href="#"><img src="images/11.jpg" alt="11"></a></li>
            <li><a href="#"><img src="images/12.jpg" alt="12"></a></li>
            <li><a href="#"><img src="images/13.jpg" alt="13"></a></li>
            <li><a href="#"><img src="images/14.jpg" alt="14"></a></li>
        </ul>
        <ol>
            <li class="show"><i class="fa fa-star"></i></li>
            <li><i class="fa fa-star"></i></li>
            <li><i class="fa fa-star"></i></li>
            <li><i class="fa fa-star"></i></li>
        </ol>
        <div class="btn">
            <span class="next">&gt;</span>
            <span class="prev">&lt;</span>
        </div>
    </div>
    <script src="tools.js"></script>
    <script>
    //让图片自动切换起来
    //首先要获取所有图片

        var lis = document.querySelectorAll("ul li");//获取到所有图片li标签
        var ol_lis = document.querySelectorAll("ol li");//获取所有星星li标签
        // console.log(lis);
        var len = lis.length;//获得li的数量;

        var currindex = 0;//状态量。表示当前li
        var nextindex = 1;//状态量。表示下一个li
        function play_animate(){
            fadeOut(lis[currindex],400);//淡出函数
            fadeIn(lis[nextindex],400);//淡入函数
            ol_lis[currindex].className = "";//移除对应图片的star的颜色
            ol_lis[nextindex].className = "show";//给下一个对应图片的star添加color
            currindex = nextindex;//将下一个赋值给当前
            nextindex++;//得到更下一个
            if(nextindex > len - 1){//如果元素越界,设置为0
                nextindex = 0;
            }
        }
        var timer = setInterval(play_animate,1000);//设置定时器

        var container = document.querySelector(".container");//获取大盒子
        container.onmouseenter = function (){//鼠标移入大盒子清除定时器
            clearInterval(timer);
        }
        container.onmouseleave = function(){//鼠标移出大盒子添加定时器
            timer = setInterval(play_animate,1000);
        }

        var ol = document.querySelector("ol");//获取ol
        var i_s = document.querySelectorAll("ol li i");//获取ol里面的i标签
        // console.log(ol);
        ol.onclick = function(event){//以事件委托的方式得到鼠标点击的i标签
            event = event||window.event;//兼容ie做法
            var source = event.target;//得到事件源
            if(source.nodeName === "I"){//判断事件源是不是i
                // console.log(source);
                // console.log(ol_lis);
                var index = Array.from(i_s).indexOf(source);//找到事件源的下标
                if(currindex === index ) return;//如果事件源的下标与标签的下标一样,表示当前下标对应当前图片,则不执行
                nextindex = index;//如果不相等,则,将事件源的下标赋值给 图片下标,即改变分、当前图片下标,让其显示
                play_animate();//调用动画函数来显示图片
            }
        }

        var next_ = document.querySelector(".btn .next");
        var prev_ = document.querySelector(".btn .prev");//获取prev和next按钮
        next_.onclick = function(){//next按钮按下,表明图片显示下一张,这与play_animate一样,点击则立即执行该函数
            play_animate();
        }
        prev_.onclick = function(){//prev按钮按下,表明图片显示上一张,而play_animate是显示下一张,所以这里要改变传入到fedain中的元素,这就需要他的序号减一
            nextindex = currindex - 1;//将当前图片序号减一赋给本来的下一张,达到改变序号的目的
            if(nextindex<0){//如果图片的序号已经小于0,那么就越出了边界,所以要判断一下
                nextindex = len -1;//条件成立,就让下一张的序号变为最后一张
            }
            play_animate();//调用函数
        }
        next_.onselectstart = function(event){
            event.preventDefault();//消除鼠标点击>选中变蓝的问题
        }
        prev_.onselectstart = function(event){
            event.preventDefault();//消除鼠标点击<选中变蓝的问题
        }
    </script>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 看见这句走向卓越的路可能并不拥挤,就想到了老师之前做过的数据分析。订阅人数6万,刷掉不读的40%,再滤掉不经常留言...
    ToBeMself阅读 233评论 0 0
  • 徐堰依稀记得,那时是十一月,在放火星救援。 她和于诔的暧昧正传得风风火火,她新鲜劲尚未过,觉得于诔至少长得白,眼睛...
    MrMuller阅读 224评论 0 0
  • 文//独上西楼 人们把远方 轻易挂在嘴边 可有谁去过 又有谁看过 远方是梦的容颜 还是诗的模样 / 如果 把远方安...
    独上西楼月依楼阅读 273评论 1 2
  • 科目二,也就是五必考 考前准备: 调前后位,调背位,放垫子(不够高),安全带,试试离合刹车,死火一次试试松离合至最...
    加部馆长阅读 616评论 1 7