Js輪播圖效果實現

使用css漸變動畫,完成圖片的切換的效果。

效果圖:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>輪播事件</title>
    <style>
        html,
        body {
            width: 100%;
            height: 100%;
            position: relative;
            margin: 0;
            padding: 0
        }
        
        #container {
            display: flex;
            align-items: center;
            justify-content: center;
            width: 100%;
            height: 100%;
        }
        
        .slide-wrap {
            width: 1366px;
            height: 768px;
            display: flex;
            position: relative;
            align-items: center;
            justify-content: center;
        }
        
        .slide-items {
            flex: 1;
            width: 100%;
            height: 100%;
        }
        
        .slide-items>ul {
            overflow: hidden;
            position: absolute;
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
        }
        
        .slide-items>ul>li {
            position: absolute;
            width: 100%;
            top: 0;
            left: 0;
            height: 100%;
            opacity: 0;
            transition: all 800ms ease-in
        }
        
        .slide-action {
            position: absolute;
            /*display: inline-block;*/
            height: 50px;
            width: 50px;
            line-height: 50px;
            text-align: center;
            z-index: 3;
        }
        
        .slide-action>a {
            text-decoration: none;
            color: #fff;
            font-size: 16px;
            width: 100%;
            height: 100%;
            border-radius: 100%;
            display: inline-block;
            background-color: rgba(232, 232, 232, 0.54);
            transition: background-color 200ms ease-out;
        }
        
        .slide-action>a:hover {
            background-color: rgba(162, 162, 162, 0.54);
        }
        
        .action-prev {
            left: 0;
            margin-left: 50px
        }
        
        .action-next {
            right: 0;
            margin-right: 50px
        }
        
        .slide-indicator {
            position: absolute;
            width: 100%;
            height: 24px;
            z-index: 99;
            bottom: 40px;
            display: flex;
            align-items: center;
            justify-content: center;
        }
        
        .slide-indicator>ul {
            height: 24px;
            float: left;
            list-style: none;
            padding: 0;
            margin: 0;
        }
        
        .slide-indicator>ul>li,
        .slide-indicator>ul>li>a {
            height: 24px;
            width: 24px;
            display: inline-block;
        }
        
        .slide-indicator>ul>li>a {
            cursor: pointer;
            background-color: rgba(56, 56, 56, 0.55);
            border-radius: 10px;
            width: 10px;
            height: 10px;
            transition: background-color 600ms ease;
        }
        
        .selected {
            background-color: #fff;
        }
    </style>
</head>

<body>
    <div id="container">
        <div class="slide-wrap">
            <div class="slide-items">
                <ul>
                    <li>
                        <a > ![](img/slide-1.jpg)</a>
                    </li>
                    <li>
                        <a > ![](img/slide-2.jpg)</a>
                    </li>
                    <li>
                        <a > ![](img/slide-3.jpg)</a>
                    </li>
                    <li>
                        <a > ![](img/slide-4.jpg)</a>
                    </li>
                </ul>
            </div>
            <span class="slide-action action-prev"><a href="#" id="prev"><</a></span>
            <span class="slide-action action-next"><a href="#" id="next">></a></span>
            <div class="slide-indicator">
                <ul>
                    <li>
                        <a href=""></a>
                    </li>
                    <li>
                        <a href=""></a>
                    </li>
                    <li>
                        <a href=""></a>
                    </li>
                    <li>
                        <a href=""></a>
                    </li>
                </ul>
            </div>
        </div>
    </div>

    <script>
        function addLoadEvent(func) {
            var oldonload = window.onload
            if (typeof window.onload !== 'function') {
                window.onload = func
            } else {
                window.onload = function () {
                    oldonload()
                    func()
                }
            }
        }

        let slide = () => {
            let slide = document.querySelector(".slide-wrap")
            let slideAction = document.querySelectorAll(".slide-action")
            let items = document.querySelectorAll(".slide-items ul li")
            let indicators = document.querySelectorAll(".slide-indicator ul li a")
            let next = document.getElementById('next')
            let prev = document.getElementById('prev')
            let index = 1
            let timer = null

            // 默認屬性設置
            items[0].style.zIndex = 1
            items[0].style.opacity = 1
            indicators[0].style.backgroundColor = "#fff"

            next.addEventListener('click', (e) => {
                animate()
                index++
                if (index + 1 > items.length) {
                    index = 0
                }
                e.preventDefault()
            })
            prev.addEventListener('click', (e) => {
                if (index-- <= 0) {
                    index = parseInt(items.length, 10) - 1
                }
                animate(index)
                e.preventDefault()
            })

            // 自動播放
            timer = setInterval(() => { next.click() }, 4000)
            //控制顯示
            let animate = (t) => {
                if (typeof t !== 'undefined') { index = t }
                for (let i = 0, l = items.length; i < l; i++) {
                    if (items[i].style.zIndex == 1) {
                        items[i].style.zIndex = 0
                        items[i].style.opacity = 0
                        indicators[i].style.backgroundColor = "rgba(56, 56, 56, 0.55)"
                        break
                    }
                }
                console.log('【animate index:】', index)
                items[index].style.opacity = 1
                items[index].style.zIndex = 1
                indicators[index].style.backgroundColor = "#fff"
            }
            // 指示器顯示綁定事件
            indicators.forEach((el, i) => {
                el.addEventListener('click', (e) => {
                    animate(i)
                    index = i + 1
                    if (index + 1 > items.length) {
                        index = 0
                    }
                    e.preventDefault()
                })
            }, this)

            // 鼠標懸停事件
            slide.addEventListener('mouseover', (e) => {
                clearInterval(timer)
                slideAction.forEach((el) => {
                    el.style.display = 'inline-block'
                }, this);
            })
            slide.addEventListener('mouseleave', (e) => {
                timer = setInterval(() => { next.click() }, 4000)
                slideAction.forEach((el) => {
                    el.style.display = 'none'
                }, this);
            })
        }

        addLoadEvent(slide)
    </script>
</body>

</html>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,765評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,179評論 4 61
  • 感賞兒子做完功課,并讓我看他做中文的作業,一頁一頁地翻給我看。我贊揚他功課字寫的好,中文寫了很多,答題也棒,他很開...
    正走在幸福的路上閱讀 224評論 1 11
  • 今天要寫寫她。 我的生命中有無數的她,有的親密無間,有的恩重如山,有的嚴厲關愛,有的貼心體貼.看,今天要說的是陌生...
    在楚生香閱讀 294評論 0 0
  • 相信很多職場人都有過和上司睡的經歷,不過這里我說的是跟同性上司。不過如果你和異性上司睡過同一間房,那么請站在燈光下...
    宛若婉君閱讀 61,777評論 0 2