• 写一个简陋版的js轮播图


    首先第一步应该是把思路捋一捋:

    1.先想象一下轮播图长什么样,然后轮播图由什么组成。

    2.自己想象的轮播图就是中间一张图片然后一直自动切换图片。

    3.最主体就是中间一张大图片。

    4.图片可以使用img直接挂上去,但是还要考虑之后的自动轮播,所以图片的主体可以使用div包起来,之后依靠display方便效果的实现

    5.使用div的background-image实现图片的显示,但是这样子图片会一直按顺序排列下去

    6.所以可以使用position里的绝对定位实现图片全部都放在一个区域

    7.好图片放好之后,就可以考虑轮播效果的实现了

    -----------------------------------------------------------------------

    8.之前说了使用div显示图片是因为可以使用display属性使得图片隐藏于显示,从而实现轮播效果

    -----------------------------------------------------------------------

    思路想好了,接下来就是实现思路了

    下面的代码是先实现图片的基本骨架:

    <body>
    <!--首先写一个简单的轮播图,既只有图片在动,没有其它的操作-->
    <!--这个div放图片,负责整个框架-->
    <div class="mainBox">
        <div class="pic picBox1"></div>
        <div class="pic picBox2"></div>
        <div class="pic picBox3"></div>
        <div class="pic picBox4"></div>
        <div class="pic picBox5"></div>
    </div>

    class='mainBox'是一个主题骨架,其主要作用是在定位position的时候作为下面图片div的参考

    注意:position里的absolute参考的是不为static属性的第一次父标签,所以mainbox的position应该手动设置为relative

    html里的骨架实现了,接下来就是css代码的实现了

    <style>
            .mainBox {
                width: 1250px;
                height: 500px;
                margin: 30px auto;
                border: 3px solid pink;
                overflow: hidden;
                border-radius: 50px 50px;
                position: relative;
            }
            .pic {
                width: 1200px;
                height: 460px;
                border: 5px solid lightskyblue;
                margin: 30px 20px;
                background-repeat: no-repeat;
                position: absolute;
            }
            .picBox1 {
                background-image:url("Hua_1.jpg");
            }
            .picBox2 {
                background-image:url("Hua_2.jpg");
            }
            .picBox3 {
                background-image:url("Hua_3.jpg");
            }
            .picBox4 {
                background-image:url("Hua_4.jpg");
            }
            .picBox5 {
                background-image:url("Hua_5.jpg");
            }
        </style>

    再接下来就是js的代码实现了

    <script>
        var pics = document.getElementsByClassName('pic');
        var index = 0;
        setInterval(function() {
            index += 1;
            if(index >= pics.length) {
                index = 0;
            }
            changeImage();
        },3000);
        var changeImage = function() {
            for(var i = 0;i < pics.length;i += 1)
                pics[i].style.display = 'none';
            pics[index].style.display = 'block';
        };
        //setInterval(function() { console.log(1)},1000);
    </script>

    index是作为图片显示的索引数字。

    其中最主要是应用display这个属性来实现图片的轮播效果

    最简陋版的轮播图就是这样了,接下来就是写可以有按钮的轮播图了

    -----------------------------------------------------------------------------------------

    先实现只有上下两个按钮的轮播图

    1.对于按钮而言是上下按钮

    2.但是对于整体而言还要考虑它的效果的实现

    3.效果有:当鼠标放在图片上的时候图片不要动,但是当鼠标从图片上移走的时候图片又要实现自动轮播了,所以这里可以考虑从主main盒子的onmouseover以及onmouseout来实现

    html骨架如下

    <body>
    <!--首先写一个简单的轮播图,既只有图片在动,没有其它的操作-->
    <!--这个div放图片,负责整个框架-->
    <div class="mainBox" id="mainBox">
        <!--图片的显示-->
        <div class="pic picBox1"></div>
        <div class="pic picBox2"></div>
        <div class="pic picBox3"></div>
        <div class="pic picBox4"></div>
        <div class="pic picBox5"></div>
        <!--图片上的两个按钮的显示-->
        <a href="javascript:void(0)"><div class="button prev" id="prev"></div></a>//上一张
        <a href="javascript:void(0)"><div class="button next" id="next"></div></a>//下一张
    </div>
    </body>

    其实与上面的对比就是多了两个a标签

    接着就是css的实现了

    <style>
            .mainBox {
                width: 1250px;
                height: 500px;
                margin: 30px auto;
                border: 3px solid pink;
                overflow: hidden;
                border-radius: 50px 50px;
                position: relative;
            }
            .pic {
                width: 1200px;
                height: 460px;
                border: 5px solid lightskyblue;
                margin: 30px 20px;
                background-repeat: no-repeat;
                position: absolute;
            }
            .picBox1 {
                background-image:url("Hua_1.jpg");
            }
            .picBox2 {
                background-image:url("Hua_2.jpg");
            }
            .picBox3 {
                background-image:url("Hua_3.jpg");
            }
            .picBox4 {
                background-image:url("Hua_4.jpg");
                /*display: none;*/
            }
            .picBox5 {
                background-image:url("Hua_5.jpg");
                /*display: none;*/
            }
            .button {
                 30px;
                height: 70px;
                background: lightskyblue;
                position: absolute;
                top: 50%;
                left: 100px;
                margin-top: -10px;
            }
            .next {
                left: 1130px;
                background: pink;
            }
        </style>

    其实与上面相比就是多了最下面黑色部分的代码,这里也就是普通的css代码

    然后最后就是js的实现了

    <script>
        var pics = document.getElementsByClassName('pic');//获取图片的
        var index = 0;//图片的索引标志
        var mainBox = document.getElementById('mainBox');//获取主盒子的dom操作
        var timeId;//计时器的id
        //改变图片
        var changeImage = function() {
            for(var i = 0;i < pics.length;i += 1)
                pics[i].style.display = 'none';
            pics[index].style.display = 'block';
        };
        //鼠标从main盒子上离开
        mainBox.onmouseout = function() {
            timeId = setInterval(function() {
                index += 1;
                if(index >= pics.length) {
                    index = 0;
                }
                changeImage();
            },3000);//自动切换图片
        };
        mainBox.onmouseover = function() {
            clearInterval(timeId);
        };//清除自动效果
        mainBox.onmouseout();//实现没有动鼠标,图片就轮播
    
        //按钮的效果实现
        var prev = document.getElementById('prev');//上一张图片的按钮
        //实现点击上一张图片
        prev.onclick = function() {
            index -= 1;
            if(index < 0) {
                index = pics.length - 1;
            }
            changeImage();
        };
        var next = document.getElementById('next');//下一张图片的按钮
        //实现点击下一张图片
        next.onclick = function() {
            index += 1;
            if(index >= pics.length) {
                index = 0;
            }
            changeImage();
        };
    </script>

    注释都在图片上应该可以看懂,

    不过还有要注意的

    mainBox.onmouseover = function() {
            clearInterval(timeId);
        };
    这里不能写成mainBox.onmouserover = clearInterval(timeId);
    如果写了,那么图片的轮播效果就会变得很快,具体为什么我也不知道,如果有大神知道的话还望指点一二
    -----------------------------------

    接下来就是实现在图片上添加小圆点了,其实最最难的还是添加小圆点
    整体代码如下
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>今天是2019/7/21打算自己动手,自己思考写一个轮播图</title>
        <style>
            .mainBox {
                width: 1250px;
                height: 500px;
                margin: 30px auto;
                border: 3px solid pink;
                overflow: hidden;
                border-radius: 50px 50px;
                position: relative;
            }
            .pic {
                width: 1200px;
                height: 460px;
                border: 5px solid lightskyblue;
                margin: 30px 20px;
                background-repeat: no-repeat;
                position: absolute;
            }
            .picBox1 {
                background-image:url("Hua_1.jpg");
            }
            .picBox2 {
                background-image:url("Hua_2.jpg");
            }
            .picBox3 {
                background-image:url("Hua_3.jpg");
            }
            .picBox4 {
                background-image:url("Hua_4.jpg");
                /*display: none;*/
            }
            .picBox5 {
                background-image:url("Hua_5.jpg");
                /*display: none;*/
            }
            .button {
                width: 30px;
                height: 70px;
                background: lightskyblue;
                position: absolute;
                top: 50%;
                left: 100px;
                margin-top: -10px;
            }
            .button:hover {
                background-color: lavender;
                opacity: 0.6;
            }
            .next {
                left: 1130px;
                background: pink;
            }
            #dots {
                position: absolute;
                bottom: 10px;
                right: 40px;
                text-align: right;
            }
            #dots div {
                display: inline-block;/*这里要理解一下*/
                width: 10px;
                height: 10px;
                border-radius: 50%;
                bottom: 20px;
                right: 50px;
                margin-left: 10px;
                background: lavenderblush;
                cursor: pointer;/*这里是表示鼠标放在上面的时候有特效*/
    
            }
            #dots div.dot {
                /*background: lightskyblue;*/
                box-shadow: 3px 2px 3px red;/*阴影效果*/
            }
        </style>
    </head>
    <body>
    <!--首先写一个简单的轮播图,既只有图片在动,没有其它的操作-->
    <!--这个div放图片,负责整个框架-->
    <div class="mainBox" id="mainBox">
        <!--图片的显示-->
        <div class="pic picBox1"></div>
        <div class="pic picBox2"></div>
        <div class="pic picBox3"></div>
        <div class="pic picBox4"></div>
        <div class="pic picBox5"></div>
        <!--图片上的两个按钮的显示-->
        <a href="javascript:void(0)"><div class="button prev" id="prev"></div></a><!--上一张-->
        <a href="javascript:void(0)"><div class="button next" id="next"></div></a><!--下一张-->
        <!--图片上的小圆点-->
        <div id="dots">
            <div class="dot"></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>
    </div>
    <script>
        var pics = document.getElementsByClassName('pic');//获取图片的
        var index = 0;//图片的索引标志
        var mainBox = document.getElementById('mainBox');//获取主盒子的dom操作
        var timeId;//计时器的id
        //改变图片
        var changeImage = function() {
            for(var i = 0;i < pics.length;i += 1)
                pics[i].style.display = 'none';
            pics[index].style.display = 'block';
        };
        //鼠标从main盒子上离开
        mainBox.onmouseout = function() {
            timeId = setInterval(function() {
                index += 1;
                if(index >= pics.length) {
                    index = 0;
                }
                changeImage();
            },3000);//自动切换图片
        };
        mainBox.onmouseover = function() {
            clearInterval(timeId);
        };//清除自动效果
        mainBox.onmouseout();//实现没有动鼠标,图片就轮播
    
        //按钮的效果实现
        var prev = document.getElementById('prev');//上一张图片的按钮
        //实现点击上一张图片
        prev.onclick = function() {
            index -= 1;
            if(index < 0) {
                index = pics.length - 1;
            }
            changeImage();
        };
        var next = document.getElementById('next');//下一张图片的按钮
        //实现点击下一张图片
        next.onclick = function() {
            index += 1;
            if(index >= pics.length) {
                index = 0;
            }
            changeImage();
        };
        //小圆点特效
        var dot = document.getElementById('dots').getElementsByTagName('div');//获取dots标签下的div
        for (var i = 0;i < dot.length;i += 1) {
            dot[i].id = 'dot' + String(i);
            dot[i].onclick = function() {
                for(var j = 0;j < dot.length;j += 1)
                    dot[j].className = '';//这个其实可以添加在changeImage函数里
                index = parseInt(String(this.id).replace(/[^0-9]/ig,""));//注意这里this.id里的this是指向dot对象,因为在js里万物皆为对象,this指向调用点击时的对象小圆点
                dot[index].className = 'dot';
                changeImage();
            }
        }
    </script>
    </body>
    </html>

     基本就算写完了,,,多看看吧

  • 相关阅读:
    IntelliJ IDEA常用统一设置2-Inspections检查设置(Linux/Mac/Windows)
    IntelliJ IDEA版本:Ultimate、Community、EAP版本的区别
    IntelliJ IDEA重构技巧收集
    Java泛型中的类型擦除机制简单理解
    阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
    Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
    Java使用logback记录日志时分级别保存文件
    Java中List,Set和Map详解及其区别和使用场景(转)
    Java中泛型的Class<Object>与Class<?>的区别(转)
    Java中泛型T和Class<T>以及Class<?>的理解(转)
  • 原文地址:https://www.cnblogs.com/WildSky/p/11220484.html
Copyright © 2020-2023  润新知