使用jQuery實現的平滑滾動輪播圖

優惠碼發放發表於2018-08-29

使用jQuery實現的平滑滾動輪播圖

<script type="text/javascript">
/*
 * 功能說明:
 * 1.點選向左(右)的圖示 ,平滑的切換到上(下)頁。
 * 2,無限的迴圈切換:第一頁的商業為最後一頁 ,最後一頁的下,一張為第一頁
 * 3,每隔3秒自動切換到下一頁
 * 4,當滑鼠進入圖片區域時,自動切換停止 ,當滑鼠離開時,又開始自動切換
 * 5,切換頁面時 ,下面的圓點也跟著同步切換
 * 6,點選圓點切換對應的頁。
 * */

    //-------------------------------頁面的平滑翻頁-------------
    $(function() {

        //點選向右或向左的圖形進行翻頁
        var $content = $(`#content`);
        var $list = $(`#img_list`);
        var $points = $(`#points>span`);
        var $prev = $(`#but_1`);
        var $next = $(`#but_2`);

        var IMG_WIDTH = 1000; //定義單張圖片的長度
        var TIME = 400; //時間
        var ITEM_TIME = 10; //單張圖片移動的時間
        var imgCount = 7;
        var index = 0; //起始圓點的索引
        var moving = false;
        /*
         * @
         * 手動的向左和向右的按鈕
         */
        $prev.click(function() {
            nextPage(true);
        })
        $next.click(function() {
            nextPage(false);
        })
        /*
         *@
         * 自動翻頁(true : 左 false : 右)
         */
        var $fanye = setInterval(function() {
            nextPage(false);
        }, 3000);

        /*
         *滑鼠移入時自動翻頁停止,箭頭顯示
         * 滑鼠移出時自動翻頁啟動,箭頭消失
         */
        $content.hover(function() {
            //清除迴圈
            clearInterval($fanye);
            $next.css(`display`, `block`);
            $prev.css(`display`, `block`);
        },
            function() {
                $next.css(`display`, `none`);
                $prev.css(`display`, `none`);
                $fanye = setInterval(function() {
                    nextPage(false);
                }, 3000);
            })
        /*
         * @
         * 點選圓點切換圖片,並更新圓點的樣式
         */
        $points.click(function() {
            var targetIndex = $(this).index();
            //計算目標頁的下標
            if (targetIndex != index) {
                nextPage(targetIndex);
            }
        })
        /*
         * 移到下一頁的方法
         */
        function nextPage(next) {
            //定義一個標誌位,當標誌位為true時表示當前的頁面為翻頁的過程中
            if (moving) {
                return; //當標誌為為true時退出(也就是說在翻頁的過程中禁止其他的事件呼叫nextPage()方法)
            }
            moving = true;
            var offset = 0; //所需要移動的距離,單張 或 單張*next
            //判斷引數是boolean 還是整型的(boolean型的就是向左右移動,整型的就是移動到指定的圖片)
            if (typeof next == `boolean`) {
                offset = next ? IMG_WIDTH : -IMG_WIDTH; //左移還是右移
            } else {
                offset = -(next - index) * IMG_WIDTH;
            }
            var itemoffset = offset / (TIME / ITEM_TIME); //單位移動的距離
            var now_margin_left = parseInt($list.css(`margin-left`)); //獲得當前移動前的距離
            //圖片的停止位置
            var targetLeft = now_margin_left + offset; //目標位置

            var xunhuan = setInterval(function() {
                now_margin_left += itemoffset; //獲得當前的位置
                if (now_margin_left === targetLeft) {
                    clearInterval(xunhuan); //到達目標的位置,並清除定時器
                    moving = false; //在翻頁結束時(清除定時器)

                    //判斷是否到達左邊和右邊的邊界
                    if (now_margin_left == -(imgCount - 1) * IMG_WIDTH) {
                        now_margin_left = (-IMG_WIDTH);
                    }
                    if (now_margin_left === 0) {
                        now_margin_left = -(imgCount - 2) * IMG_WIDTH;
                    }
                }
                $list.css(`margin-left`, now_margin_left + `px`); //修改css樣式
            }, ITEM_TIME);
            updatePoints(next); //更新圓點的樣式 

            /*
             * 更新圓點的的方法
             */
            function updatePoints(next) { //將目標圓點更新為targetIndex
                var targetIndex = 0; //目標圓點
                //計算出目標圓點的下標,給目標圓點新增 class  on屬性
                /*
                 * 判斷引數是boolean型的還是整型的
                 * (如果是boolean型的直接左右移動,如果是整型的直接跳轉到圖片的索引)
                 * 
                 */
                if (typeof next == `boolean`) {
                    if (next) {
                        targetIndex = index - 1; //     0 ~ imgCount-1
                        //判斷是否到達最左邊或最右邊
                        if (targetIndex == -(imgCount - 2)) { //第一個圓點
                            targetIndex = 0;
                        }
                    } else {
                        targetIndex = index + 1;
                        if (targetIndex == imgCount - 2) { //跳轉到第5個圖片
                            targetIndex = 0;
                        }
                    }
                } else {
                    targetIndex = next;
                }
                //清除上一個圓點的樣式,給目標圓點新增樣式
                $points.eq(index).removeClass(`on`);
                $points.eq(targetIndex).addClass(`on`);
                index = targetIndex; //移動方法
            }
        }
    })
    </script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147

詳細程式碼地址:https://download.csdn.net/download/wangzijian121/10630705

原文地址https://blog.csdn.net/wangzijian121/article/details/82143748


相關文章