華為輪播圖

簡陋佈局

<div id="box">
    <ul>
        <li><img src="../img/hw-1.png" alt=""/></li>
        <li><img src="../img/hw-2.png" alt=""/></li>
        <li><img src="../img/hw-3.png" alt=""/></li>
    </ul>
    <div id="btn">
        <a href="javascript:;" class="active"></a>
        <a href="javascript:;"></a>
        <a href="javascript:;"></a>
    </div>
</div>

当可视区只有一张图片时,可使用该方法;当走完最后一张一个像素时;突然把第一张改为相对定位,放在最后面,即left值 = li.length * imgwidth; 当走完第一张时,再把相对定位取消,【重新放回第一位】:要点切换的视觉效果只是一个:最后一个到第一个之间;第一张图在static与relative之间切换;即在第一位与最后一位之间切换,视觉效果只为最后一张到第一张之间;

    window.onload = function () {
        var box = document.getElementById('box');
        var ul = box.getElementsByTagName('ul')[0];
        var li = ul.getElementsByTagName('li');
        var img = ul.getElementsByTagName('img');
        var btn = document.getElementById('btn');
        var a = btn.getElementsByTagName('a');
        var imgwidth = img[0].offsetWidth; //1920
        ul.style.width = imgwidth * img.length + 'px';

        toReSize();
        window.onresize = function () { //改變瀏覽器大小時
            toReSize();
        }
        function toReSize() {
            var vWidth = document.documentElement.clientWidth;//瀏覽器窗口大小
            if (vWidth > 1000) {    //可視區大小
                for (var i = 0; i < img.length; i++) {  //三個圖片都居中
                    img[i].style.left = -((imgwidth - vWidth) / 2 ) + 'px'
                } //圖片寬度 - 可寬區大小 的一半
            }
        }
        for (var i = 0; i < a.length; i++) {
            a[i].index = i//0,1,2
            a[i].onclick = function () {
                for (var i = 0; i < a.length; i++) { //清空全部
                    a[i].className = ''
                }
                this.className = 'active'//當前加
                startMove(ul, {left: -this.index * imgwidth})
            }
        }
        //自動播放 開定時器,找一個變量進行累加
        var iNow = 0;  //iNow 即可看作屬性,給定時器使用,同時也造成循環的條件 inow是循環按鈕的
        var iNow2 = 0;  // [最後到第一個的無縫切換]
        setInterval(toRun, 5000);
        function toRun() {
            if (iNow == a.length - 1) {
                //1、走到最後一個時,把第一個改成定位,即把第一個放在所有圖片後面  [最後到第一個的無縫切換]
                li[0].style.position = 'relative'
                li[0].style.left = li.length * imgwidth + 'px'
                iNow = 0;
            }
            else {
                iNow++   //需要判斷,不然3個後出錯
            }
            iNow2++ //再往後累加 [最後到第一個的無縫切換]
            for (var i = 0; i < a.length; i++) { //先還原按鈕
                a[i].className = ''
            }
            a[iNow].className = 'active';
            startMove(ul, {left: -iNow2 * imgwidth}, function () { //2、走完第一個時取消定位
                if (iNow == 0) {
                    li[0].style.position = 'static'
                    ul.style.left = 0; //拉回,還原之前的樣式
                    iNow2 = 0; //iNow2要循環不能一直累加。
                }
            }) // function (){} 鏈式操作 [最後到第一個的無縫切換]
        }
    }
*{margin:0;padding:0}#box{height:540px;position:relative;overflow:hidden}#box ul{position:absolute;left:0}#box ul li{list-style:none;float:left}#box ul li img{position:relative;left:0}#btn{position:absolute;width:100%;text-align:center;bottom:10px}#btn a{cursor:pointer;display:inline-block;width:11px;height:11px;background:#666;border-radius:50%}#btn .active{background:#fff}#btn a:hover{background:#fff}

運行

JS改進版:運行



JQ版,固定html,所謂帶點幼稚的封裝;

<div class="elmokSlide">
    <div class="hd">
        <ul></ul>
    </div>
    <div class="bd">
        <ul>
            <li><img src="http://elmok.com/img/mmb1.png" alt=""/></li>
            <li><img src="http://elmok.com/img/mmb2.png" alt=""/></li>
            <li><img src="http://elmok.com/img/mmb3.png" alt=""/></li>
        </ul>
    </div>
    <div class="pn">
        <a href="javascript:;"> < </a>
        <a href="javascript:;"> > </a>
    </div>
</div>

調用:

    var el = new Elmokslide('.elmokSlide')
    el.eslide({
        'hd': true, //底部點點點
        'lr': true, //左右方向
        'auto': true //自動播放
    })

JQ改進版:運行

韓雪輪播圖

原理

<div id='box'>1,2,3,4</div>
<input type="button" value="切換" id="input"/>
var box = document.getElementById('box')
var input = document.getElementById('input')
input.onclick = function(){
    var arr = box.innerHTML.split(','); //轉換為數組[1,2,3,4]
    arr.push(arr[0]) //第一項加到最後 [1,2,3,4,1]
    arr.shift() //刪除首項 [2,3,4,1]
    box.innerHTML = arr;
}

正式例子
簡陋佈局

<div id="div1">
    <a href="javascript:;" class="prev">←</a>
    <a href="javascript:;" class="next">→</a>
    <ul>
        <li class="pos_1"><img src="../img/h1.jpg" alt="" width="280"/></li>
        <li class="pos_2"><img src="../img/h2.jpg" alt="" width="380"/></li>
        <li class="pos_3"><img src="../img/h3.jpg" alt="" width="480"/></li>
        <li class="pos_4"><img src="../img/h4.jpg" alt="" width="580"/></li>
        <li class="pos_5"><img src="../img/h5.jpg" alt="" width="680"/></li>
        <li class="pos_6"><img src="../img/h6.jpg" alt="" width="580"/></li>
        <li class="pos_7"><img src="../img/h7.jpg" alt="" width="480"/></li>
        <li class="pos_8"><img src="../img/h8.jpg" alt="" width="380"/></li>
        <li class="pos_9"><img src="../img/h9.jpg" alt="" width="280"/></li>
        <li class="pos_10"><img src="../img/h10.jpg" alt="" width="180"/></li>
    </ul>
</div>
    window.onload = function () {
        var div = document.getElementById('div1')
        var li = div.getElementsByTagName('li')
        var a = div.getElementsByTagName('a')
        var arr = []; //放置需要改變的每張圖片的左寬透明度等;
        for (var i = 0; i < li.length; i++) {
            var img = li[i].getElementsByTagName('img')[0]
            arr.push([parseInt(getStyle(li[i], 'left')), parseInt(getStyle(li[i], 'top')), getStyle(li[i], 'opacity') * 100, getStyle(li[i], 'zIndex'), img.width])
        }
        a[0].onclick = function () {
            arr.push(arr[0]);//先把第一項放到後面  1,2,3,4,1
            arr.shift() //再刪除第一項   2,3,4,1
            for (var i = 0; i < li.length; i++) {
                var img = li[i].getElementsByTagName('img')[0]  //圖片需要重新獲取,不寫則錯亂
                li[i].style.zIndex = arr[i][3]  //更改透明度
                startMove(li[i], {left: arr[i][0], top: arr[i][1], opacity: arr[i][2]})  //加入運動函數
                startMove(img, {width: arr[i][4]})  //更改圖片寬度
            }
        }
        a[1].onclick = function () {
            arr.unshift(arr[arr.length - 1]);//最後一項放到第一位  4,1,2,3,4
            arr.pop() //再刪除最後一項   4,1,2,3
            for (var i = 0; i < li.length; i++) {
                var img = li[i].getElementsByTagName('img')[0]  //圖片需要重新獲取,不寫則錯亂
                li[i].style.zIndex = arr[i][3]  //更改透明度
                startMove(li[i], {left: arr[i][0], top: arr[i][1], opacity: arr[i][2]})  //加入運動函數
                startMove(img, {width: arr[i][4]})  //更改圖片寬度
            }
        }
    }
*{margin:0;padding:0}li{list-style:none;position:absolute;left:0;top:0;overflow:hidden}#div1{width:680px;margin:0 auto;position:relative;top:30px}.pos_1{opacity:.2;z-index:0;left:-200px}.pos_2{opacity:.4;z-index:0;left:-150px}.pos_3{opacity:.6;z-index:0;left:-100px}.pos_4{opacity:.8;z-index:0;left:-50px}.pos_5{opacity:1;z-index:5;left:0}.pos_6{opacity:.8;z-index:4;left:150px}.pos_7{opacity:.6;z-index:3;left:300px}.pos_8{opacity:.4;z-index:2;left:450px}.pos_9{opacity:.2;z-index:1;left:600px}.pos_10{opacity:0;z-index:0;left:750px}.next,.prev{display:inline-block;width:60px;height:40px;background-color:#E4E4E4;position:absolute;color:#373737;z-index:6;line-height:40px;font-size:40px;text-align:center;text-decoration:none;opacity:.8}.prev{left:0;top:190px}.next{right:0;top:190px}.next a:hover,.prev a:hover{opacity:1;color:#000}

運行