javascript模擬多頁切換圖片查看效果

前端入坑紀(jì) 18

好看的人太多,有趣的靈魂太少!最近看到這句話,真的是感觸良多啊。希望自己能逐漸成為后者,那富裕幽默的靈魂。

今天來個(gè)多頁效果,也是給同學(xué)的靜態(tài)網(wǎng)站的效果之一!

多頁切換圖片查看效果

OK,first things first!項(xiàng)目鏈接

HTML 結(jié)構(gòu)
    <div class="mainWrp">
        <section class="clear">
            <div class="imgsWrp">
                <a class="innerImg" href="javascript:;" data-img="http://sandbox.runjs.cn/uploads/rs/113/ajzbmzhg/b00.jpg">
                    ![](http://upload-images.jianshu.io/upload_images/4732938-97e1fbea337354c6.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
                </a>
                <p>風(fēng)景如畫00</p>
            </div>
            <div class="imgsWrp">
                <a class="innerImg" href="javascript:;" data-img="http://sandbox.runjs.cn/uploads/rs/113/ajzbmzhg/b01.jpg">
                    ![](http://upload-images.jianshu.io/upload_images/4732938-17f4ab557565eed5.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
                <p>風(fēng)景如畫01</p>
            </div>
            <div class="imgsWrp">
                <a class="innerImg" href="javascript:;" data-img="http://sandbox.runjs.cn/uploads/rs/113/ajzbmzhg/b02.jpg">
                    ![](http://upload-images.jianshu.io/upload_images/4732938-acf63054dcf35c49.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
                
                <p>風(fēng)景如畫02</p>
            </div>
            <div class="imgsWrp">
                <a class="innerImg" href="javascript:;" data-img="http://sandbox.runjs.cn/uploads/rs/113/ajzbmzhg/b03.jpg">
                    ![](http://upload-images.jianshu.io/upload_images/4732938-b8c13430f1ba3459.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
                
                <p>風(fēng)景如畫03</p>
            </div>
            <div class="imgsWrp">
                <a class="innerImg" href="javascript:;" data-img="http://sandbox.runjs.cn/uploads/rs/113/ajzbmzhg/b04.jpg">
                    ![](http://upload-images.jianshu.io/upload_images/4732938-37e0b0e658072ce9.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
               
                <p>風(fēng)景如畫04</p>
            </div>
            <div class="imgsWrp">
                <a class="innerImg" href="javascript:;" data-img="http://sandbox.runjs.cn/uploads/rs/113/ajzbmzhg/b05.jpg">
                    ![](http://upload-images.jianshu.io/upload_images/4732938-670ffdc79755abd2.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)</a>
                
                <p>風(fēng)景如畫05</p>
            </div>
        </section>
        <div class="pgNum" id="pageAs">
            <a href="javascript:;">1</a><a href="javascript:;">2</a><a href="javascript:;">3</a><a href="javascript:;">4</a>
        </div>

        <div id="showBox">
            <a href="javascript:;">關(guān)閉</a>
            ![](img/b01.jpg)
            <p>風(fēng)景如畫</p>
        </div>
    </div>

我知道圖片的代碼上傳一定又被過濾掉了,小伙伴請(qǐng)移步項(xiàng)目效果里看吧。這次每個(gè)圖片的外包的a標(biāo)簽有個(gè)data-img的自定義屬性,這是給showBox用的。也就是點(diǎn)了小圖片,顯示個(gè)大圖來。

CSS 結(jié)構(gòu)
        * {
            margin: 0;
            padding: 0
        }
        
        a {
            color: #333;
            text-decoration: none;
        }
        
        img {
            border: none;
        }
        
        html,
        body {
            font-family: "Microsoft YaHei", Verdana, Geneva, Tahoma, sans-serif;
            height: 100%;
            background: #fefefe;
            text-align: center;
        }
        
        .clear::after {
            content: "";
            display: table;
            clear: both
        }
        
        ul,
        li {
            list-style: none
        }
        
        .imgsWrp {
            float: left;
            width: 33.33%;
            text-align: center;
        }
        
        .imgsWrp p {
            width: 100%;
            margin-bottom: 10px;
            color: #666
        }
        
        .innerImg {
            position: relative;
            display: block;
            height: 0;
            width: 0;
            padding: 33% 47%;
            margin: 10px auto 0;
            overflow: hidden;
            background-position: 50% 50%;
            background-repeat: no-repeat;
            background-size: 100% auto;
        }
        
        .innerImg img {
            position: absolute;
            left: 0;
            top: 0\9;
            top: 50%;
            width: 100%;
            transform: translateY(-50%);
            -webkit-transform: translateY(-50%)
        }
        
        .pgNum {
            width: 80%;
            margin: 20px auto;
            text-align: center
        }
        
        .pgNum a {
            display: inline-block;
            margin: 6px;
            border: 1px solid #ccc;
            color: #666;
            width: 30px;
            line-height: 30px;
            height: 30px;
            transition: all 360ms linear;
        }
        
        .pgNum a {
            -webkit-user-select: none;
            user-select: none;
        }
        
        .pgNum a:hover,
        .pgNum a:active,
        .pgNum a.active {
            background-color: skyblue;
            border-color: #fefefe;
            color: #fff;
        }
        
        #showBox {
            display: none;
            position: fixed;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            z-index: 9;
            text-align: center;
            background-color: #333;
            background-color: rgba(0, 0, 0, .9)
        }
        
        #showBox img {
            width: 60%;
            margin: 3%
        }
        
        #showBox p {
            color: #fff;
            width: 80%;
            margin: 0 auto;
            line-height: 160%;
        }
        
        #showBox a {
            position: absolute;
            display: block;
            top: 8px;
            right: 8px;
            border-radius: 3px;
            border: 1px solid #fff;
            font-size: 12px;
            padding: 5px 16px;
            color: #fff;
        }

這次css的樣式里,那一個(gè)個(gè)圖片顯示,做了個(gè)小技巧。圖片的父級(jí)是用padding撐開的,然后圖片相對(duì)于它定位在垂直水平居中,最后overflow:hidden

JS 結(jié)構(gòu)
        var arr = [{
            imgsrc: "b00",
            cont: "風(fēng)景如畫00"
        },{
            imgsrc: "b01",
            cont: "風(fēng)景如畫01"
        }, {
            imgsrc: "b02",
            cont: "風(fēng)景如畫02"
        }, {
            imgsrc: "b03",
            cont: "風(fēng)景如畫03"
        }, {
            imgsrc: "b04",
            cont: "風(fēng)景如畫04"
        }, {
            imgsrc: "b05",
            cont: "風(fēng)景如畫05"
        }, {
            imgsrc: "b06",
            cont: "風(fēng)景如畫06"
        }, {
            imgsrc: "b07",
            cont: "風(fēng)景如畫07"
        }, {
            imgsrc: "b09",
            cont: "風(fēng)景如畫09"
        }, {
            imgsrc: "b10",
            cont: "風(fēng)景如畫10"
        }, {
            imgsrc: "b12",
            cont: "風(fēng)景如畫11"
        }, {
            imgsrc: "b13",
            cont: "風(fēng)景如畫12"
        }, {
            imgsrc: "b14",
            cont: "風(fēng)景如畫13"
        }, {
            imgsrc: "b15",
            cont: "風(fēng)景如畫14"
        }, {
            imgsrc: "b16",
            cont: "風(fēng)景如畫15"
        }, {
            imgsrc: "b17",
            cont: "風(fēng)景如畫16"
        }, {
            imgsrc: "b18",
            cont: "風(fēng)景如畫17"
        }, {
            imgsrc: "b19",
            cont: "風(fēng)景如畫18"
        }, {
            imgsrc: "b20",
            cont: "風(fēng)景如畫19"
        }, {
            imgsrc: "b21",
            cont: "風(fēng)景如畫20"
        }, {
            imgsrc: "b22",
            cont: "風(fēng)景如畫21"
        }, {
            imgsrc: "b24",
            cont: "風(fēng)景如畫22"
        }];
        var pageAs = document.getElementById("pageAs").getElementsByTagName("a"),
            imgsWrp = document.getElementsByClassName("imgsWrp"),
            showBox = document.getElementById("showBox");
        // showBox 關(guān)閉按鈕事件
        showBox.getElementsByTagName("a")[0].onclick = function() {
            showBox.style.display = "none";
        }
        for (var j = 0; j < imgsWrp.length; j++) {
            // 給每個(gè)imgsWrp設(shè)置自定義indx屬性,后面有用
            imgsWrp[j].setAttribute("indx", j);
            imgsWrp[j].onclick = function() {
                showBox.style.display = "block";
                // 變更showBox里的圖片地址 = 當(dāng)前子元素a的自定義data-img值
                showBox.getElementsByTagName("img")[0].src = this.getElementsByTagName("a")[0].getAttribute("data-img");
                // 變更showBox里的p內(nèi)容 = 當(dāng)前子元素p的內(nèi)容
                showBox.getElementsByTagName("p")[0].innerText = this.getElementsByTagName("p")[0].innerText;
            }
        }

        for (var i = 0; i < pageAs.length; i++) {
            pageAs[i].onclick = (function() {
                // 獲取頁碼,從0開始計(jì)數(shù)
                var pgNum = Number(this.innerText) - 1;
                for (var j = 0; j < imgsWrp.length; j++) {
                    // 取出之前付給imgsWrp的indx值
                    var indx = Number(imgsWrp[j].getAttribute("indx"));
                    // arrNow 每次根據(jù)頁面變更時(shí),arr數(shù)組里對(duì)應(yīng)的取值,012345,67891011,......
                    var arrNow = arr[indx + pgNum * imgsWrp.length];
                    if (arrNow) {
                        // 如果每次取值時(shí)都有,則顯示imgsWrp
                        imgsWrp[j].style.display = "block";
                        // 變更當(dāng)前imgsWrp里圖片的src地址
                        imgsWrp[j].getElementsByTagName("a")[0].getElementsByTagName("img")[0].src = "http://sandbox.runjs.cn/uploads/rs/113/ajzbmzhg/" + arrNow.imgsrc + ".jpg";
                        // 變更當(dāng)前imgsWrp里a的自定義屬性值data-img
                        imgsWrp[j].getElementsByTagName("a")[0].setAttribute("data-img", "http://sandbox.runjs.cn/uploads/rs/113/ajzbmzhg/" + arrNow.imgsrc + ".jpg");
                        // 變更當(dāng)前imgsWrp里p的內(nèi)容
                        imgsWrp[j].getElementsByTagName("p")[0].innerText = arrNow.cont;
                    } else {
                        // 如果每次取值時(shí)沒有,則隱藏imgsWrp
                        imgsWrp[j].style.display = "none";
                    }

                }
            })
        }

這次js注釋的很全,感興趣的小伙伴,可以好好研究下。其實(shí)原理很簡(jiǎn)單,就是根據(jù)頁數(shù),去顯示對(duì)應(yīng)范圍內(nèi)的數(shù)組項(xiàng)目

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,939評(píng)論 25 709
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,118評(píng)論 1 92
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,186評(píng)論 4 61
  • 高中那會(huì),站在教室窗口眺望遠(yuǎn)方的時(shí)候,我會(huì)記得有人曾在我的耳邊說:里面這里就像一座城里面的人想出去,外面的人想進(jìn)來...
    beyourself1998閱讀 276評(píng)論 0 0
  • 早上八點(diǎn)又七分,終于收拾好一切,出門上班。 走了四百米后,半扎丸子頭的丸子開始散落,于是直接扎成馬尾了。 后面突然...
    珍珍小姐閱讀 423評(píng)論 0 0

友情鏈接更多精彩內(nèi)容