欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用vue寫一個仿簡書的輪播圖的示例代碼

 更新時間:2018年03月13日 10:38:59   作者:AIBBSHINBAJI  
本篇文章主要介紹了用vue寫一個仿簡書的輪播圖的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1.先展示最終效果:

2.解決思路

Vue的理念是以數(shù)據(jù)驅(qū)動視圖,所以拒絕通過改變元素的margin-top來實現(xiàn)滾動效果。寫好css樣式,只需改變每張圖片的class即可實現(xiàn)輪播效果。動畫效果交給transition完成??梢詫⑤啿D看成兩個(mainSlide和extraSlide),各個圖片的位置如圖所示:

3.代碼實現(xiàn)

各個slide的樣式:

$width: 800px;   // 容器寬度
$height: 300px;   // 容器高度
$bWidth: 500px;   // 大圖片寬度
$sWidth: $width - $bWidth; // 小圖片寬度
$sHeight: $height / 2; // 小圖片高度
#slider-wrapper{
  width: $width;
  height: $height;
  margin: 0 auto;
  cursor: pointer;
  background: #ddd;
  border-radius: 5px;
  box-shadow: 0 1px 6px rgba(0,0,0,0.117647), 0 1px 4px rgba(0,0,0,0.117647);
  display: flex;
  overflow: hidden;
  div{
    display: inline-block;
  }
}
.main-slide{
  width: $bWidth;
  height: $height;
  float: left;
  transition: all .4s ease;
}
.extra-slide{
  width: $sWidth;
  position: relative;
  .extra-slide-item{
    position: absolute;
    width: $sWidth;
    height: $sHeight;
    left: 0;
    transition: .4s ease-out;
  }
  .extra-slide-top{
    top: -$sHeight;
  }
  .extra-slide-middle-first{
    top: 0;
    z-index: 2
  }
  .extra-slide-middle-second{
    top: $sHeight;
    z-index: 2
  }
  .extra-slide-bottom{
    top: $height
  }
  .extra-slide-hide{
    display: none!important;
  }
}

模板包含兩個輪播圖:

<div id="slider-wrapper" @mouseover="stop" @mouseout="start">
  <!-- 輪播圖1,mainSlide -->
  <div class="main-slide" :style="`background: url(${slideConfig[nowIndex].src})`"></div>
  <!-- 輪播圖2,extraSlide -->
  <div class="extra-slide">
    <div class="extra-slide-item" :class="slideClass(i)" v-for="(v, i) in slideConfig" :key="i" :style="`background: url(${v.src}); background-size: cover`"></div>
  </div>
</div>

scripts部分,設(shè)置一個nowIndex,定時改變nowIndex。所有圖片的class根據(jù)這個nowIndex來變化,這里使用了es6的map類型,詳情點擊:http://www.dbjr.com.cn/article/111734.htm

export default {
  name: 'slider',
  data: function() {  
    return {
      slideInterval: null,
      nowIndex: 0,
      slideLength: this.slideConfig.length
    }
  },
  props: {
    slideConfig: {
      type: Array
    }
  },
  methods: {
    // 限制index不能超出圖片列表長度
    resetIndex(i) {
      return i > this.slideLength - 1 ? i - this.slideLength : i
    },
    slideClass(i) {
      let nowIndex = this.nowIndex
      // Map就是key也可以是非字符串的對象,不用Map多寫幾個 if else 也可以
      let map = new Map([
        [this.resetIndex(nowIndex), 'extra-slide-top'],
        [this.resetIndex(nowIndex + 1), 'extra-slide-middle-first'],
        [this.resetIndex(nowIndex + 2), 'extra-slide-middle-second'],
        [this.resetIndex(nowIndex + 3), 'extra-slide-bottom']
      ])
      // 圖片的class根據(jù)nowIndex的變化而變化
      return map.get(i) ? map.get(i) : 'extra-slide-hide'
    },
    start() {
      // 定時改變nowIndex
      this.slideInterval = setInterval(() => {
        this.nowIndex = this.nowIndex > this.slideLength - 2 ? 0 : this.nowIndex + 1
        console.log(this.nowIndex)
      }, 2000)
    },
    stop() {
      clearInterval(this.slideInterval)
      this.slideInterval = null
    }
  },
  mounted() {
    this.start()
  },
  destroyed() {
    this.stop()
  }
}

slideConfig,組件的props:

const prefix = '/src/assets/'
const slideConfig = [{
 src: prefix + 's1.jpg',
 title: '圖1',
 desc: '說明1'
}, {
 src: prefix + 's2.jpg',
 title: '圖2',
 desc: '說明2'
}, {
 src: prefix + 's3.jpg',
 title: '圖3',
 desc: '說明3'
}, {
 src: prefix + 's4.jpg',
 title: '圖4',
 desc: '說明4'
}, {
 src: prefix + 's5.jpg',
 title: '圖5',
 desc: '說明5'
}, {
 src: prefix + 's6.jpg',
 title: '圖6',
 desc: '說明6'
}]
export default slideConfig

使用:

<slider :slideConfig="slideConfig" />

2018/3/12 16:55 : slideConfig已修改成Props,提取slider.vue就可以直接用了

gitHub傳送門:https://github.com/bougieL/jianshuslider

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue是怎么渲染template內(nèi)的標(biāo)簽內(nèi)容的

    Vue是怎么渲染template內(nèi)的標(biāo)簽內(nèi)容的

    這篇文章主要介紹了Vue是怎么渲染template內(nèi)的標(biāo)簽內(nèi)容的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Vue組件庫Element-常見組件表格示例代碼

    Vue組件庫Element-常見組件表格示例代碼

    對于Element組件的使用,最主要的就是明確自己想要達(dá)到的效果,從官網(wǎng)中將對應(yīng)代碼復(fù)制粘貼即可,最重要的是要讀懂不同組件官網(wǎng)中提供的文檔,以便實現(xiàn)自己想要的效果,本文給大家介紹Vue組件庫Element-常見組件表格,感興趣的朋友一起看看吧
    2023-10-10
  • 解決vue創(chuàng)建項目使用vue-router和vuex報錯Object(...)is not a function

    解決vue創(chuàng)建項目使用vue-router和vuex報錯Object(...)is not a&nb

    這篇文章主要介紹了解決vue創(chuàng)建項目使用vue-router和vuex報錯Object(...)is not a function問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • vue-cli 項目打包完成后運行文件路徑報錯問題

    vue-cli 項目打包完成后運行文件路徑報錯問題

    這篇文章主要介紹了vue-cli 項目打包完成后運行文件路徑報錯問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 使用Vue手寫一個對話框

    使用Vue手寫一個對話框

    相信大家之前都寫過一些組件,尤其是這樣的彈窗組件,這篇文章主要來和大家聊聊如何使用Vue手寫一個對話框,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • vue3中?provide?和?inject?用法及原理

    vue3中?provide?和?inject?用法及原理

    這篇文章主要介紹vue3中?provide?和?inject?用法及原理,provide?和?inject可以?解決多次組件傳遞數(shù)據(jù)的問題,下面文章是具體的用法和實現(xiàn)原理,具有一定的參考價值,需要的朋友可以參考一下,希望對大家有所幫助
    2021-11-11
  • Vuex簡單入門

    Vuex簡單入門

    本篇文章主要介紹了初步認(rèn)識理解Vuex,Vuex就是在一個項目中,提供唯一的管理數(shù)據(jù)源的倉庫,有興趣的可以了解一下
    2017-04-04
  • npm run serve運行vue項目時報錯:Error: error:0308010C:digital envelope routines::unsupported的解決方法

    npm run serve運行vue項目時報錯:Error: error:0308010C

    這篇文章主要介紹了npm run serve運行vue項目時,出現(xiàn)報錯:Error: error:0308010C:digital envelope routines::unsupported的解決方法,文中有詳細(xì)的解決方法,需要的朋友可以參考下
    2024-04-04
  • 基于vue 實現(xiàn)表單中password輸入的顯示與隱藏功能

    基于vue 實現(xiàn)表單中password輸入的顯示與隱藏功能

    這篇文章主要介紹了vue 實現(xiàn)表單中password輸入的顯示與隱藏功能 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • vue實現(xiàn)移動端項目多行文本溢出省略

    vue實現(xiàn)移動端項目多行文本溢出省略

    這篇文章主要介紹了vue實現(xiàn)移動端項目多行文本溢出省略功能,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07

最新評論