1. 程式人生 > >JS實現一個簡單的輪播圖

JS實現一個簡單的輪播圖

主要程式碼如下:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="css/index.css" />
</head>
<body>
<div id="dv">
    <!--相框-->
    <div id="dv2">
        <!--存放圖片-->
        <ul id="ul1" class="lunbo">
            <li><a href="#"><img src="images/1.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/2.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/3.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/4.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/5.jpg" alt=""></a></li>
            <li><a href="#"><img src="images/6.jpg" alt=""></a></li>
        </ul>

        <!--圓點-->
        <ul id="ul2" class="dian">
            <li class="current">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
        </ul>

        <!--方向箭頭-->
        <ul class="fx">
            <li id="left"><span>&lt;</span></li>
            <li id="right"><span>&gt;</span></li>
        </ul>
    </div>
</div>

<script src="js/common.js"></script>
<script src="js/moveEle.js"></script>
<script>
    //獲取相框的寬度
    var xkk=my$('dv2').offsetWidth;
    console.log(xkk);

    //獲取圖片
    var tupian=my$('ul1');
    console.log(tupian.className);

    //獲取點
    var list=my$('ul2').children;
    console.log(list);

    var index=0;
    for(var i=0;i<list.length;i++){
        //為每次滑鼠觸碰的點設定一個屬性index,用index來儲存數字i,用來設定移動的距離
        list[i].setAttribute('index',i);

        //滑鼠懸浮事件實現移動
        list[i].onmouseover=function(){
            //首先清除所有點的背景顏色
            for(var j=0;j<list.length;j++){
                list[j].removeAttribute('class');
            }
            //設定當前懸浮的點的背景顏色
            this.className='current';

            //呼叫移動函式,並且先獲取到當前index的值
            index=this.getAttribute('index');
            move(tupian,-xkk*index,50);
        };
    }

    my$('left').onmouseover=function(){
        this.style.backgroundColor='rgba(255,255,255,.8)';
    };
    my$('left').onmouseout=function(){
        this.style.backgroundColor='rgba(255,255,255,.5)';
    };
    my$('right').onmouseover=function(){
        this.style.backgroundColor='rgba(255,255,255,.8)';
    };
    my$('right').onmouseout=function(){
        this.style.backgroundColor='rgba(255,255,255,.5)';
    };

    //左右箭頭切換圖片

    //var index=0;  不用自己定義了,直接使用上面的滑鼠懸浮事件的index,這樣可以使得圖片實時移動
    my$('right').onclick=function(){
        if(index<list.length-1){
            index++;
            for(var k=0;k<list.length;k++){
                list[k].removeAttribute('class');
            }
            list[index].className='current';
            move(tupian,-xkk*index,50);
        }
    };
    my$('left').onclick=function(){
        if(index>0){
            index--;
            for(var k=0;k<list.length;k++){
                list[k].removeAttribute('class');
            }
            list[index].className='current';
            move(tupian,-xkk*index,50);
        }
    };

</script>
</body>
</html>

其中樣式程式碼以及移動元素的moveEle函式和獲取元素的my$函式在外部的js中。
分別如下:

//移動元素的函式

function move(ele,aim,step){
    //每次點選執行函式的時候都清除定時器,防止連續點選加快移動速度
    //之所以用ele.time是為了不出time  undefined的錯誤
    clearInterval(ele.time);

    ele.time=setInterval(function() {
        //獲取當前位置 offsetLeft獲得的是數字不帶單位
        var now = ele.offsetLeft;

        //確定每次移動的單位距離step的正負,如果目標距離aim大於當前距離,step為正,反之step為負
        //每次執行函式之前將step初始化為正值
        step = Math.abs(step);
        step = now < aim ? step : -step;

        //設定每次執行函式當前得位置都在變化,變化量為step
        now += step;

        //設定元素的位置,如果正在向目標位置移動,那麼Math.abs(now-aim)>Math.abs(step),如果已經在目標位置的地方
        //但是不能精確則Math.abs(now-aim)<Math.abs(step),這兩種情況的當前位置是不一樣的
        if (Math.abs(now - aim) > Math.abs(step)) {
            ele.style.left = now+'px';
        } else if (Math.abs(now - aim) < Math.abs(step)) {
            ele.style.left = aim+'px';
            clearInterval(time);
        }
        else if(Math.abs(now - aim) === Math.abs(step)){
            ele.style.left = aim+'px';
        }
    },20);


}
//通過id獲取元素
function my$(id){
    return document.getElementById(id);
}

樣式程式碼:

        * {
            margin: 0;
            padding: 0;
        }
        body {
            font: 13px 'Macrosoft Yahei';
            font-weight: bold;
            color: green;
        }
        img {
            vertical-align: middle;
        }
        ul {
            list-style-type: none;
        }
        li {
            cursor: pointer;
        }

        #dv {
            width: 450px;
            height: 300px;
            margin: 100px auto;
            border: 1px solid gray;
            /*overflow: hidden;*/
            padding: 3px;
        }
        #dv2 {
            height: 100%;
            overflow: hidden;
            position: relative;
        }
        #dv2 ul.lunbo {
            width: 1000%;
            position: absolute;
            top: 0;
            left: 0;
        }
        #dv2 ul li {
            float: left;
        }
        #dv ul li a img {
            width: 450px;
            height: 300px;
        }
        
        ul.dian {
            position: absolute;
            right: 10px;
            bottom: 10px;
            
        }
        ul.dian li {
            width: 16px;
            height: 16px;
            text-align: center;
            line-height: 16px;
            background-color: #fff;
            margin-left: 10px;
            border: 1px solid gray;
        }
        ul.dian li.current {
            background-color: yellow;
        }
        #dv2 ul.fx li {
            top: 50%;
            margin-top: -15px;
            width: 50px;
            height: 30px;
            border-radius: 15px;
            position: absolute;
            background-color: rgba(255,255,255,.5);
            line-height: 30px;
        }
        #dv2 ul.fx li#left {
            left: 0;
            transform: translate(-50%,0);
        }
        #dv2 ul.fx li#right {
            right: 0;
            transform: translate(50%,0);
        }
        #dv2 ul.fx li#left span {
            position: absolute;
            right: 12px;
        }
        #dv2 ul.fx li#right span {
            position: absolute;
            left: 12px;
        }

最終效果:
在這裡插入圖片描述
完整的專案壓縮包百度網盤下載>>>提取碼:pioh
簡單輪播圖