vue 幻燈片組件封裝

今天來(lái)做個(gè)幻燈組件的筆記,這里只記錄實(shí)現(xiàn)邏輯女责,不對(duì)樣式代碼做展示漆枚。
一個(gè)幻燈片組件需要實(shí)現(xiàn)的功能如下:
1、幻燈片的循環(huán)播放抵知;
2墙基、幻燈片分頁(yè)软族;
3、幻燈片標(biāo)題的顯示残制;
4立砸、鼠標(biāo)進(jìn)入,停止幻燈切換初茶;
5颗祝、鼠標(biāo)離開,繼續(xù)幻燈切換恼布;
6螺戳、點(diǎn)擊相應(yīng)幻燈,或幻燈標(biāo)題桥氏,觸發(fā)不同事件(根據(jù)實(shí)際需求做處理)温峭;
7、點(diǎn)擊頁(yè)碼字支,實(shí)現(xiàn)幻燈切換及循環(huán)播放凤藏。
效果如下:


具體步驟

第一步:新建slideShow.vue組件;
<template>
  <div>hello world {{ x }}</div>
</template>

<script>
  export default {
    name: "slideShow",
    data() {
      return {
        x : '我是slideShow'
      }
    }
  }
</script>
第二步:在父組件中引入
// template
<div class="index-right">
  <slide-show></slide-show>
</div>

// script
import slideShow from '../components/slideShow'
export default {
  components: {
    slideShow
  },
   data() {
      return {
      }
  }
}

這時(shí)候可以看到效果:slideShow組件的內(nèi)容已被渲染到父組件


第三步:在父組件為幻燈片動(dòng)態(tài)綁定要顯示的內(nèi)容堕伪,并在子組件接收揖庄。

知識(shí)點(diǎn):父、子組件通信欠雌。
父組件 :template

<slide-show :slides="slides"></slide-show> 

script :data

slides: [
        {
          src: require('../assets/slideShow/pic1.jpg'),
          title: 'xxx1',
          href: 'detail/analysis'
        },
        {
          src: require('../assets/slideShow/pic2.jpg'),
          title: 'xxx2',
          href: 'detail/count'
        },
        {
          src: require('../assets/slideShow/pic3.jpg'),
          title: 'xxx3',
          href: 'http://xxx.xxx.com'
        },
        {
          src: require('../assets/slideShow/pic4.jpg'),
          title: 'xxx4',
          href: 'detail/forecast'
        }
      ]

子組件蹄梢,這里限制了父組件傳參的類型

 props: {
    slides: {
      type: Array,
      default: []
    }
  },
  mounted () {
    console.log(this.slides)
  }

這里可以看到,子組件接收到了父組件傳過(guò)來(lái)的參數(shù)



第四步:把父組件傳來(lái)的參數(shù)展示在模板富俄;


<template>
  <div class="slide-show">
    <div class="slide-img">
      <a href="xxx">
          <img :src="slides[0].src">
      </a>
    </div>
    <h2>{{ slides[0].title }}</h2>
    <ul class="slide-pages">
      <li><</li>
      <li>1</li>
      <li>1</li>
      <li>1</li>
      <li>></li>
    </ul>
  </div>
</template>

效果如下



第五步:分頁(yè)禁炒,讓幻燈片切換

<template>
  <div class="slide-show">
    <div class="slide-img">
      <a :href="slides[nowIndex].href">
        <img :src="slides[nowIndex].src">
      </a>
    </div>
    <h2>{{ slides[nowIndex].title }}</h2>
    <ul class="slide-pages">
      <li>&lt;</li>
      <li v-for="(item, index) in slides" @click="goto(index)">
        <a>{{ index + 1 }}</a>
      </li>
      <li>&gt;</li>
    </ul>
  </div>
</template>

    methods: {
      goto(index) {
        this.nowIndex = index
      }
    },

實(shí)現(xiàn)頁(yè)碼上一頁(yè)、下一頁(yè)功能霍比;使用計(jì)算屬性幕袱,通過(guò)一個(gè)方法實(shí)現(xiàn);
知識(shí)點(diǎn):計(jì)算屬性悠瞬。

<li @click="goto(prevIndex)">&lt;</li>
<li v-for="(item, index) in slides" @click="goto(index)">
  <a :class="{on: index === nowIndex}">{{ index + 1 }}</a>
</li>
<li @click="goto(nextIndex)">&gt;</li>
      
  computed: {
    prevIndex () {
      if (this.nowIndex === 0) {
        return this.slides.length - 1
      }
      else {
        return this.nowIndex - 1
      } 
    },
    nextIndex () {
      if (this.nowIndex === this.slides.length - 1) {
        return 0
      }
      else {
        return this.nowIndex + 1
      }
    }
  },

第六步:讓幻燈片自動(dòng)切換
父組件動(dòng)態(tài)傳參:幻燈片自動(dòng)切換時(shí)間間隔

<slide-show :slides="slides" :inv="invTime"></slide-show>

// 在data中注冊(cè)
invTime: 2000,

子組件

// props 注冊(cè)組件的動(dòng)態(tài)屬性
    inv: {
      type: Number,
      default: 1000
    }
    
// 添加 methods實(shí)現(xiàn)幻燈片切換
    runInv () {
      this.invId = setInterval(() => {
        this.goto(this.nextIndex)
      }, this.inv)
    },
// 在mounted中調(diào)用方法
  mounted () {
    this.runInv();
  }

第七步:鼠標(biāo)事件

// 在methods注冊(cè)一個(gè)清除切換的方法
    clearInv () {
      clearInterval(this.invId)
    }

// 在根節(jié)點(diǎn)添加鼠標(biāo)時(shí)間
<template>
  <div class="slide-show" @mouseover="clearInv" @mouseout="runInv">
...

第八步:高級(jí)功能:圖片的動(dòng)畫效果
知識(shí)點(diǎn):樣式標(biāo)簽transition的使用们豌;
難點(diǎn):這里的兩個(gè)nowIndex一個(gè)是新值一個(gè)是舊值,在goto函數(shù)中改變浅妆。

// 幻燈片切換添加transition
      <a :href="slides[nowIndex].href">
        <transition name="slide-trans">
          <img v-if="isShow" :src="slides[nowIndex].src">
        </transition>
        <transition name="slide-trans-old">
          <img v-if="!isShow" :src="slides[nowIndex].src">
        </transition>
      </a>
      
// 為變量注冊(cè)初始值
isShow:true

// 修改goto函數(shù)
      goto(index) {
        this.isShow = false
        setTimeout(() => {
          this.isShow = true
          this.nowIndex = index
        }, 10)
      },

// 添加樣式
  .slide-trans-enter-active {
    transition: all .5s;
  }
  .slide-trans-enter {
    transform: translateX(900px);
  }
  .slide-trans-old-leave-active {
    transition: all .5s;
    transform: translateX(-900px);
  }

第九步:子組件切換:觸發(fā)父組件的事件
知識(shí)點(diǎn):子組件向父組件通信

// 所有的切換都是在goto函數(shù)中望迎,所以在goto函數(shù)調(diào)用事件$emit
      goto(index) {
        this.isShow = false
        setTimeout(() => {
          this.isShow = true
          this.nowIndex = index
          this.$emit('onChange',index)
        }, 10)
      },
// 在父組件的子組件標(biāo)簽中綁定事件
<slide-show :slides="slides" :inv="invTime" @onChange="doSomethingOnSlideChange"></slide-show>
// 在methods中實(shí)現(xiàn)綁定的事件
    methods: {
      doSomethingOnSlideChange() {
        console.log('幻燈片切換了,父組件要做點(diǎn)什么')
      }
    },
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凌外,一起剝皮案震驚了整個(gè)濱河市辩尊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌康辑,老刑警劉巖对省,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝗拿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蒿涎,警方通過(guò)查閱死者的電腦和手機(jī)哀托,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)劳秋,“玉大人仓手,你說(shuō)我怎么就攤上這事〔J纾” “怎么了嗽冒?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)补履。 經(jīng)常有香客問(wèn)我添坊,道長(zhǎng),這世上最難降的妖魔是什么箫锤? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任贬蛙,我火速辦了婚禮,結(jié)果婚禮上谚攒,老公的妹妹穿的比我還像新娘阳准。我一直安慰自己,他們只是感情好馏臭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布野蝇。 她就那樣靜靜地躺著,像睡著了一般括儒。 火紅的嫁衣襯著肌膚如雪绕沈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天帮寻,我揣著相機(jī)與錄音七冲,去河邊找鬼。 笑死规婆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝉稳。 我是一名探鬼主播抒蚜,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼耘戚!你這毒婦竟也來(lái)了嗡髓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤收津,失蹤者是張志新(化名)和其女友劉穎饿这,沒(méi)想到半個(gè)月后浊伙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡长捧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年嚣鄙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片串结。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哑子,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肌割,到底是詐尸還是另有隱情卧蜓,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布把敞,位于F島的核電站弥奸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奋早。R本人自食惡果不足惜盛霎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伸蚯。 院中可真熱鬧摩渺,春花似錦、人聲如沸剂邮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挥萌。三九已至绰姻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間引瀑,已是汗流浹背狂芋。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憨栽,地道東北人帜矾。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屑柔,于是被迫代替她去往敵國(guó)和親屡萤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前言 您將在本文當(dāng)中了解到,往網(wǎng)頁(yè)中添加數(shù)據(jù),從傳統(tǒng)的dom操作過(guò)渡到數(shù)據(jù)層操作,實(shí)現(xiàn)同一個(gè)目標(biāo),兩種不同的方式....
    itclanCoder閱讀 25,741評(píng)論 1 12
  • “這是第三遍看這部電影措译。我自己覺(jué)得很好别凤,我還要再看幾遍×旌纾” 這句話來(lái)自馬云规哪,其所褒獎(jiǎng)的對(duì)象是上個(gè)月剛剛榮獲奧斯卡大...
    玉辰弓子閱讀 416評(píng)論 0 6
  • 我所有的自負(fù)都來(lái)自我的自卑,所有的英雄氣概都來(lái)自于我內(nèi)心的軟弱掠械,所有的振振有詞都因?yàn)樾闹袧M是懷疑由缆。我假裝無(wú)情...
    即刻至上閱讀 461評(píng)論 0 1
  • 古人常說(shuō)均唉,“讀書破萬(wàn)卷,下筆如有神”肚菠,“書中自有黃金屋舔箭,書中自有顏如玉”。讀書自古以來(lái)就是一件美好的事情蚊逢。一本好書...
    把你賣了買糖吃閱讀 583評(píng)論 0 1
  • 今天中午跟溫森又是一戰(zhàn)层扶,我真是找不到原因,說(shuō)好的睡覺(jué)烙荷,他也躺下了镜会,就是中途又哭了,不明原因的哭终抽,就是哭戳表,我真是不知...
    Vincen媽媽閱讀 113評(píng)論 0 0