• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    基于vue2.0實現簡單輪播圖

    來源:懂視網 責編:小采 時間:2020-11-27 22:25:03
    文檔

    基于vue2.0實現簡單輪播圖

    基于vue2.0實現簡單輪播圖:因為之前一直在忙公司的項目,vue這塊就生疏了不少,正好借這個小demo復習下vue的知識。 先來個效果圖: 如圖所示,實現的就是一個間隔2.5s自動向左切換下一張的輪播圖,同時鼠標移入停止輪播,移出回復輪播; 而下方按鈕會根據當前圖片自動變紅且可以手動控
    推薦度:
    導讀基于vue2.0實現簡單輪播圖:因為之前一直在忙公司的項目,vue這塊就生疏了不少,正好借這個小demo復習下vue的知識。 先來個效果圖: 如圖所示,實現的就是一個間隔2.5s自動向左切換下一張的輪播圖,同時鼠標移入停止輪播,移出回復輪播; 而下方按鈕會根據當前圖片自動變紅且可以手動控

    因為之前一直在忙公司的項目,vue這塊就生疏了不少,正好借這個小demo復習下vue的知識。

    先來個效果圖:

    如圖所示,實現的就是一個間隔2.5s自動向左切換下一張的輪播圖,同時鼠標移入停止輪播,移出回復輪播;
    而下方按鈕會根據當前圖片自動變紅且可以手動控制當前圖片。

    思路:

    整個demo分為輪播圖片和控制span兩個部分。
    按照前端工程化的需求來說,這兩個部分應該解耦成兩個component最后再導入頁面比較合理,但由于demo較為簡單,
    作為練手就不搞那么復雜了,對項目有追求【強迫癥】的童鞋可以往組件化的目標靠,具體方法參考我之前的博文。

    第一步,先寫出整體框架:

    <template> 
     <div class="slide"> 
     <div class="slideshow"> 
     <ul> 
     <li v-for="(img, index) in imgArray" :key="index"> 
     <a href="#"> 
     <img :src='img'> 
     </a> 
     </li> 
     </ul> 
     </div> 
     <div class="bar"> 
     <span v-for="(item, index) in imgArray" :key="index"></span> 
     </div> 
     </div> 
    </template> 
    

    我們使用v-for列表渲染兩個部分,值得注意的是列表渲染最好要提供一個key值,至于為什么官方文檔說得很復雜,
    就我所知的是如果不加key值在使用transition-group也就是過渡效果的時候會出現bug,官方給出的建議也是盡可能
    在列表渲染的時候加上key值,百利無一害,養成習慣就好。

    第二步:

    在上一步我們渲染的是一個img數組,具體:

    data () { 
     return { 
     imgArray: [ 
     '../static/timg1.jpg', 
     '../static/timg2.jpg', 
     '../static/timg3.jpg', 
     '../static/timg4.jpg' 
     ] 
     } 
     } 
    

    然后實現輪播的原理就是創建一個變量與當前遍歷的index值比對,若相同則顯示,否則隱藏;
    同時下方按鈕index若也與變量相同則當前按鈕變為活躍狀態即背景變紅。

    <template> 
     <div class="slide"> 
     <div class="slideshow"> 
     <ul> 
     <li v-for="(img, index) in imgArray" v-show="index===mark" :key="index"> 
     <a href="#"> 
     <img :src='img'> 
     </a> 
     </li> 
     </ul> 
     </div> 
     <div class="bar"> 
     <span v-for="(item, index) in imgArray" :class="{ 'active':index===mark }" :key="index"></span> 
     </div> 
     </div> 
    </template> 
    

    第三步:

    創建定時器,每隔2.5s給變量mark+1,掛載到鉤子函數created:

    export default { 
     data () { 
     return { 
     mark: 0, //比對圖片索引的變量 
     imgArray: [ 
     '../static/timg1.jpg', 
     '../static/timg2.jpg', 
     '../static/timg3.jpg', 
     '../static/timg4.jpg' 
     ] 
     } 
     }, 
     methods: { 
     autoPlay () { 
     this.mark++; 
     if (this.mark === 4) { //當遍歷到最后一張圖片置零 
     this.mark = 0 
     } 
     }, 
     play () { 
     setInterval(this.autoPlay, 2500) 
     }, 
     change (i) { 
     this.mark = i 
     } 
     }, 
     created () { 
     this.play() 
     } 
    } 
    </script> 
    

    第四步:

    加上css文件,出現基本的效果。

    <style> 
     * { 
     margin: 0; 
     padding: 0; 
     list-style: none; 
     } 
     .slide { 
     width: 1024px; 
     height: 320px; 
     margin: 0 auto; 
     margin-top: 50px; 
     overflow: hidden; 
     position: relative; 
     } 
     .slideshow { 
     width: 1024px; 
     height: 320px; 
     } 
     li { 
     position: absolute; 
     } 
     img { 
     width: 1024px; 
     height: 320px; 
     } 
     .bar { 
     position: absolute; 
     width: 100%; 
     bottom: 10px; 
     margin: 0 auto; 
     z-index: 10; 
     text-align: center; 
     } 
     .bar span { 
     width: 20px; 
     height: 5px; 
     border: 1px solid; 
     background: white; 
     display: inline-block; 
     margin-right: 10px; 
     } 
     .active { 
     background: red !important; 
     } 
    </style> 
    

    第五步:

    現在我們得到的效果還是每隔一段時間圖片突然變成另外一張,用戶體驗很差,達不到輪播的效果。
    所以我們得加上過渡效果。
    html:

    <transition-group tag="ul" name="image"> 
     <li v-for="(img, index) in imgArray" v-show="index===mark" :key="index"> 
     <a href="#"> 
     <img :src='img'> 
     </a> 
     </li> 
    </transition-group> 

    css:

    .image-enter-active { 
     transform: translateX(0); 
     transition: all 1.5s ease; 
     } 
     .image-leave-active { 
     transform: translateX(-100%); 
     transition: all 1.5s ease; 
     } 
     .image-enter { 
     transform: translateX(100%); 
     } 
     .image-leave { 
     transform: translateX(0); 
     } 
    

    這里因為我們是給一個渲染列表加上過渡效果所以要使用transition-group而不是單元素的transition,否則會報錯。
    另外就是記得給transition-group加上tag="ul"屬性,不然就會被默認渲染成span了。
    css部分需要關聯name屬性值作為前綴。

    第六步:

    給下方按鈕增加切換圖片的點擊事件。
    最后我們再加上移入/移出實現關閉/打開定時器效果,即用戶鼠標停留當前圖片停止滾動,移出則繼續。

    <template> 
     <div class="slide" v-on:mouseover="stop()" v-on:mouseout="move()"> 
     <div class="slideshow"> 
     <transition-group tag="ul" name="image"> 
     <li v-for="(img, index) in imgArray" v-show="index===mark" :key="index"> 
     <a href="#"> 
     <img :src='img'> 
     </a> 
     </li> 
     </transition-group> 
     </div> 
     <div class="bullet"> 
     <span v-for="(item, index) in imgArray" :class="{ 'active':index===mark }" 
     @click="change(index)" :key="index"></span> 
     </div> 
     </div> 
    </template> 
     
    <script> 
    export default { 
     data () { 
     return { 
     timer: null, //定時器 
     mark: 0, //比對圖片索引的變量 
     imgArray: [ 
     '../static/timg1.jpg', 
     '../static/timg2.jpg', 
     '../static/timg3.jpg', 
     '../static/timg4.jpg' 
     ] 
     } 
     }, 
     methods: { 
     autoPlay () { 
     this.mark++; 
     if (this.mark === 4) { 
     this.mark = 0 
     } 
     }, 
     play () { 
     this.timer = setInterval(this.autoPlay, 2500) 
     }, 
     change (i) { 
     this.mark = i 
     }, 
     stop () { 
     clearInterval(this.timer) 
     }, 
     move () { 
     this.timer = setInterval(this.autoPlay, 2500) 
     } 
     }, 
     created () { 
     this.play() 
     } 
    } 
    </script> 
    

    這個地方卡了我很長時間,因為根據原生js定時器的思路在定義定時器的時候就應該設置變量,然后把這個變量傳到clearInterval函數里。
    問題在于vue函數里設置變量很不可取,存在定義域的問題,開啟定時器跟關閉定時器是兩個函數,不能共用一個變量。
    后來靈機一動,想到不如把變量寫在data里面?
    一試,成功!

    至此,輪播圖的功能基本實現。
    當然,項目做的比較簡陋也存在一些bug,如當一個切換動畫未完成前點擊另一個按鈕會出現神奇的交錯現象,由于時間關系還未解決,
    希望各位看官能提出寶貴的建議!

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    基于vue2.0實現簡單輪播圖

    基于vue2.0實現簡單輪播圖:因為之前一直在忙公司的項目,vue這塊就生疏了不少,正好借這個小demo復習下vue的知識。 先來個效果圖: 如圖所示,實現的就是一個間隔2.5s自動向左切換下一張的輪播圖,同時鼠標移入停止輪播,移出回復輪播; 而下方按鈕會根據當前圖片自動變紅且可以手動控
    推薦度:
    標簽: VUE 輪播 簡單
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品国产欧美综合一区| 欧美精品一区二区久久| 国产精品国产三级国产| 国产精品视频永久免费播放| 久久精品亚洲福利| 国产va免费精品| 久久精品国产亚洲麻豆| 国产精品天天看天天狠| 日韩精品乱码AV一区二区| 亚洲?V无码乱码国产精品| 精品水蜜桃久久久久久久| 亚洲第一精品在线视频| 国产精品一在线观看| 国产精品无套内射迪丽热巴| 日韩人妻无码精品久久久不卡| 久久精品国产一区二区三区不卡| 在线电影国产精品| 久久久91精品国产一区二区三区| 国产精品扒开腿做爽爽爽视频| 久久久无码人妻精品无码| 亚洲日韩欧美制服精品二区| 久久久久这里只有精品| 国产一区二区精品久久岳| 国产精品一级AV在线播放| 99久re热视频这里只有精品6| 精品午夜久久福利大片| 精品国产美女福利到在线不卡 | 久久久久久久久无码精品亚洲日韩| 亚洲精品无码av天堂| 亚洲av无码成人精品区在线播放| 久久露脸国产精品| 免费看污污的网站欧美国产精品不卡在线观看| 国产亚洲精品AA片在线观看不加载| 国产精品亚洲产品一区二区三区 | 精品人体无码一区二区三区| 国产福利电影一区二区三区,亚洲国模精品一区 | 久久精品国产亚洲网站| 日韩精品免费在线视频| 国产A√精品区二区三区四区| 国产精品一区二区av不卡| 久久精品亚洲精品国产欧美|