• 轮播图---左右切换无长滚动效果轮播图-中级难度版


    左右切换无长滚动轮播图
    思路:首先设有全局变量position(确定当前图片是第几张),arr数组:存放图片地址,方向:direction,

    及lis小圆点数组,prev,记录小圆点的前一个, moveBool是否进入运动函数等
    1、点击事件:点击左边的leftBn,设置direction="right",position--,在这要确定position不能超出数组长度范围,

    超出要重新赋值,点击小圆点把小圆点的当前是lis数组中的第几个赋值给position,然后图片生成
    2、图片生成:图片根据当前direction值以及position来确定插入当前图片的前面和后面,如果direction=”right“,

    插在当前图片的前面,并把装图片的盒子宽度乘以2倍,设置控制图片运动的moveBool为true,
    3、图片运动:根据当前direction值运动,如果值为right,则让装图片的盒子的left值为offset.left+40,即向右运动,

    当运动完成后设置相关属性停止进入运动函数并设置其他相关属性
    4、自动运动:设置控制自动运动的变量,初值为0,每次进入定时器++,当等于一定值时,给direction赋值,position++,

    生成图片,当点击事件发生时,则给这个变量的值设成负值,让其时间更久才能再次生成图片。
    5、关于小圆点及其它琐碎事情。每次清空之前prev的属性设置,然后给prev设置当前的li所在的position,再重新设置背景属性。

    易错点:插入图片位置,给装图片的大盒子定位及运动。及图片生成和图片运动这一块。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>中级轮播图重构</title>
        <style>
            *{margin: 0;  padding: 0;  }
            #carousel,#imgCon img{ 1200px;  height: 400px;  }
            #carousel {position: relative;  margin: auto;  overflow: hidden;  }
            #imgCon{ 1200px;  height: 400px;  position: absolute;  left: 0;  font-size: 0;  }
            #leftBn,#rightBn {position: absolute;  top:170px;  cursor: pointer;  }
            #leftBn{left: 20px;}
            #rightBn {right: 20px;  }
            ul{position: absolute;  bottom: 20px;  list-style: none;  margin: auto;  }
            li { 20px;  height: 20px;  border: 1px solid red;  border-radius: 10px; 
             float: left;  margin-left: 8px;  cursor: pointer;  }
        </style>
        <script src="../universalMethod.js"></script>
    </head>
    <body>
    <div id="carousel">
        <div id="imgCon">
            <img src="img/a.jpeg">
        </div>
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <img src="img/left.png" id="leftBn">
        <img src="img/right.png" id="rightBn">
    </div>
    <script>
        var imgCon,leftBn,rightBn,ul,lis,prev
        var arr=["img/a.jpeg","img/b.jpeg","img/c.jpeg","img/d.jpeg","img/e.jpeg"]
        var position=0
        var direction
        var autoNum=0
        var moveBool=false
        const WIDTH=1200
        const HEIGHT=400
        init()
        function init(){
            imgCon=document.getElementById("imgCon")
            leftBn=document.getElementById("leftBn")
            rightBn=document.getElementById("rightBn")
            ul=document.getElementsByTagName("ul")[0]
            leftBn.addEventListener("click",clickHandler)
            rightBn.addEventListener("click",clickHandler)
            lis=ul.children
            for(var i=0;i<lis.length;i++){
                lis[i].index=i
                lis[i].addEventListener("click",liClickHandler)
            }
            ul.style.left=(WIDTH-ul.clientWidth)/2+"px"
            liBG()
            setInterval(animation,16)
    
        }
        function createImg(){
            var data1=new Date()
            var img=Method.createElem("img",null,{
                WIDTH+"px",
                height:HEIGHT+"px"
            })
            img.src=arr[position]
            imgCon.style.width=WIDTH*2+"px"
            if(direction==="left"){
                imgCon.appendChild(img)
            }
            if(direction==="right"){
                imgCon.insertBefore(img,imgCon.lastElementChild)
                imgCon.style.left=-WIDTH+"px"
            }
            var data2=new Date()
            moveBool=true
            console.log(data2-data1)
            liBG()
        }
        function moveImg(){
            if(!moveBool) return
            if(direction==="left"){
                if(imgCon.offsetLeft<=-WIDTH){
                    imgCon.style.left=0+"px"
                    imgCon.firstElementChild.remove()
                    imgCon.style.width=WIDTH+"px"
                    moveBool=false
                    return
                }
                imgCon.style.left=(imgCon.offsetLeft-40)+"px"
            }
            if(direction==="right"){
                if(imgCon.offsetLeft>=0){
                    imgCon.lastElementChild.remove()
                    imgCon.style.width=WIDTH+"px"
                    moveBool=false
                    return
                }
                imgCon.style.left=(imgCon.offsetLeft+40)+"px"
            }
        }
        function animation(){
            moveImg()
            autoMove()
    
        }
        function autoMove(){
            autoNum++
            if(autoNum===240){
                autoNum=0
                position++
                if(position>arr.length-1) position=0
                direction="left"
                createImg()
            }
        }
        function clickHandler(){
            if(moveBool) return
            autoNum=-120
            if(this===leftBn){
                position--
                if(position<0) position=arr.length-1
                direction="right"
                createImg()
                return
            }
            position++
            if(position>arr.length-1) position = 0
            direction="left"
            createImg()
        }
        function liClickHandler(){
            if(moveBool) return
            autoNum=-120
            if(this.index>position) direction="left"
            if(this.index<position) direction="right"
            position=this.index
            createImg()
    
        }
        function liBG(){
            if(prev){
                prev.style.background="rgba(255,0,0,0)"
            }
            prev=lis[position]
            prev.style.background="rgba(255,0,0,0.5)"
        }
    </script>
    </body>
    </html>
    

      

  • 相关阅读:
    为什么新买的音响连接上电脑后有很强的杂音(电流声)?
    USB2.0 Camera驱动
    如何重命名多张图片的名称
    网络共享:[25]组策略
    线刷宝“华为荣耀畅玩7 (DUA-AL00)”刷机教程
    电信手机卡被锁,忘记了PIN码,怎么办?
    [转]glyphicons-halflings-regular字体 图标
    牛年祝福语大全
    HYQiHei GES字体汉仪旗黑全套字体
    得实AR-530K打印机驱动 vB5.5官方版
  • 原文地址:https://www.cnblogs.com/qinghao-qin/p/10158668.html
Copyright © 2020-2023  润新知