最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue如何實現(xiàn)無縫輪播圖

 更新時間:2022年09月20日 11:29:58   作者:MeinvWR  
這篇文章主要介紹了vue如何實現(xiàn)無縫輪播圖,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vue實現(xiàn)無縫輪播圖

輪播圖的思路

一組圖片進(jìn)行不停地循環(huán),如果循環(huán)到最后一張圖片,就從第一張開始,不停循環(huán),我們可以設(shè)置圖片切換的時間.

1.首先我們先把我們需要用到的數(shù)據(jù)以數(shù)組的方式定義在data中,再定義一個當(dāng)前顯示在頁面的圖片的值,默認(rèn)為0. 

? data() {
? ? return {
? ? ? v:0,
? ? ? imglist:[
? ? ? ? {"id":0,img:"/pics/picture1.jpg"},
? ? ? ? {"id":1,img:"/pics/picture3.jpg"},
? ? ? ? {"id":2,img:"/pics/picture4.jpg"},
? ? ? ]
? ? }
? },

2.我們將定義的數(shù)據(jù)渲染到頁面中,v-show使用三目判斷定義的值和下標(biāo)是否相等,如果相等值就為true(顯示),否則值為false(隱藏)

? <div class="imgbox">
? ? <img :src="item.img" alt="" v-for="(item, index) in imglist" :key="index" v-show="v==index?true:false">
? </div>

3.下一步要讓輪播圖運行起來,created()這是生命周期中的一個屬性,他的作用是在項目啟動的時候?qū)崿F(xiàn)函數(shù)自執(zhí)行. 先設(shè)置一個定時器,設(shè)置兩秒,就是圖片每兩秒切換一次,然后做判斷,如果定義的值大于圖片數(shù)字的長度減1,那么就讓值=0,從第一張開始,否則,就讓圖片一直++,不斷遞增,實現(xiàn)輪播圖的效果.

? created(){
? ? setInterval(() => {
? ? ? ? if(this.v>=2){
? ? ? ? ? ? this.v=0
? ? ? ? }
? ? ? ? else{
? ? ? ? ? this.v++
? ? ? ? }
? ? }, 2000);
? }

無縫輪播(跑馬燈效果)

1.首先創(chuàng)建兩個vue組件Sweiper.vue和SweiperItem.vue;

2.將兩個組件引入頁面,Sweiper.vue中用v-model傳參(v-model 其實是語法糖,默認(rèn)屬性value和默認(rèn)事件input);代碼中我是通過v-model的selcted將值傳給Sweiper(子組件),自動輪播時子組件再通過觸發(fā)input事件將即將顯示的值傳回給父組件

3.核心是要讓selected的值傳到SweiperItem中,與SweiperItem中的name值相等判該顯示哪張圖片; 

<template>
  <div>
    <Sweiper v-model="selected">
      <!--v-model是個語法糖,相當(dāng)于value和input事件-->
      <Sweiper-item  name="item1">
        <div class="item">
          <img :src="getImg('01')" alt="">
        </div>
      </Sweiper-item>
      <Sweiper-item name="item2">
        <div class="item">
          <img :src="getImg('02')" alt="">
        </div>
      </Sweiper-item>
      <Sweiper-item name="item3">
        <div class="item">
          <img :src="getImg('03')" alt="">
        </div>
      </Sweiper-item>
    </Sweiper>
  </div>
</template>

這里的圖片沒有通過數(shù)組用v-for循環(huán),方便大家看其結(jié)構(gòu)形式

<script>
? import Sweiper from "../components/Sweiper.vue";
? import SweiperItem from "../components/SweiperItem.vue";
? export default {
? ? name: "mySweiper",
? ? components: {
? ? ? Sweiper,
? ? ? SweiperItem
? ? },
? ? data() {
? ? ? return {
? ? ? ? selected: "item1",//默認(rèn)第一張
? ? ? }
? ? },
? ? methods:{
? ? ? getImg(url){
? ? ? ? return "img/"+url+".jpg"
? ? ? },
? ? },
? ? mounted(){
? ? ? /*setInterval(()=>{
? ? ? ?this.selected="item2"
? },3000)
? 此時因為mounted只執(zhí)行一次,所以還是不變,需要在Sweiper寫一個watch監(jiān)聽
? ? }*/這一步注釋是因為換到Sweiper組件中寫了
? }
</script>
<style >
? .item{
? ? /*border: 1px solid black;*/
? }
? .item>img{
? ? width: 100%;
? ? /*height: 0.1rem;*/
? }
</style>

Sweiper.vue

<template>
  <div class="Sweiper">
    <slot></slot>
  </div>
</template>
<script>
? export default {
? ? name: "Sweiper",
? ? data() {
? ? ? return{
? ? ? ? current:''
? ? ? }
? ? },
? ? props:{
? ? ? value:{
? ? ? ? type:String,
? ? ? ? default:""
? ? ? },
? ? },
? ? mounted(){
? ? ? //自動輪播時查找name值用indexOf的方法遍歷出當(dāng)前輪播的下表
? ? ? this.names=this.$children.map(child=>{
? ? ? ?return child.name
? ? ? });
? ? ? this. showImg();
? ? ? this. paly()
? ? },
? ? methods:{
? ? ? showImg(){
? ? ? ? this.current=this.value||this.$children[0].name;
? ? ? ? //當(dāng)前實例的直接子組件
? ? ? ? this.$children.map(vm=>{
? ? ? ? ? vm.selected=this.current
? ? ? ? })
? ? ? },
? ? ? paly(){
? ? ? ? //每次輪播把圖片做調(diào)整
? ? ? ? this.timer=setInterval(()=>{
? ? ? ? ? //indexOf返回某個指定字符串首次出現(xiàn)的位置
? ? ? ? ? const index=this.names.indexOf(this.current);
? ? ? ? ? let newIndex=index+1;
? ? ? ? ? //嚴(yán)謹(jǐn)一點
? ? ? ? ? if (newIndex===this.names.length){
? ? ? ? ? ? ?newIndex=0;
? ? ? ? ? }
? ? ? ? ? this.$emit("input",this.names[newIndex])
? ? ? ? },3000)
? ? ? }
? ? },
? ? watch:{
? ? ? //監(jiān)聽value值,發(fā)生變化就改變selected
? ? ? value(){
? ? ? ? this. showImg()
? ? ? }
? ? },
? ? beforeDestroy() {
? ? ? //實列銷毀前
? ? ? clearInterval(this.timer)
? ? }
? };
</script>
<style>
? .Sweiper{
? ? /*border: 1px solid black;*/
? ? width: 100%;
? ? height: 4rem;
? ? overflow: hidden;
? ? margin: 0 auto;
? ? position: relative;
? }
</style>

SweiperItem.vue

<template>
? <transition>
? ? <div class="Sweiper-item" v-show="isShow">
? ? ? <slot></slot>
? ? </div>
? </transition>
</template>
<script>
? export ?default {
? ? name:"SweiperItem",
? ? data(){
? ? ? return{
? ? ? ? selected:""
? ? ? }
? ? },
? ? props:{
? ? ? name:{
? ? ? ? type:String,
? ? ? ? required:true
? ? ? },
? ? },
? ? mounted(){
? ? },
? ? computed:{
? ? ? isShow(){
? ? ? ? return this.selected===this.name;
? ? ? }
? ? }
? };
</script>
<style>
? .v-enter-active,.v-leave-active{
? ? transition: all 1s linear;
? }
? .v-leave-to{
? ? transform:translate(-100%);
? }
? .v-enter{
? ? transform: translate(100%);
? }
? .v-enter-active{
? ? position: absolute;
? ? top:0;
? ? left: 0;
? }
</style>

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue實現(xiàn)打地鼠小游戲

    vue實現(xiàn)打地鼠小游戲

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)打地鼠小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 如何解決模塊““vue“”沒有導(dǎo)出的成員“ref”問題

    如何解決模塊““vue“”沒有導(dǎo)出的成員“ref”問題

    這篇文章主要介紹了如何解決模塊““vue“”沒有導(dǎo)出的成員“ref”問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • elementUI同一頁面展示多個Dialog的實現(xiàn)

    elementUI同一頁面展示多個Dialog的實現(xiàn)

    這篇文章主要介紹了elementUI同一頁面展示多個Dialog的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • vue3如何實現(xiàn)?6位支付密碼輸入框

    vue3如何實現(xiàn)?6位支付密碼輸入框

    微信、支付寶支付密碼時的密碼輸入框大家都很熟悉,本文主要介紹了vue3如何實現(xiàn)?6位支付密碼輸入框,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 使用Vue.observable()進(jìn)行狀態(tài)管理的實例代碼詳解

    使用Vue.observable()進(jìn)行狀態(tài)管理的實例代碼詳解

    這篇文章主要介紹了使用Vue.observable()進(jìn)行狀態(tài)管理的實例代碼,本文通過代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • vue-router鉤子函數(shù)實現(xiàn)路由守衛(wèi)

    vue-router鉤子函數(shù)實現(xiàn)路由守衛(wèi)

    這篇文章主要介紹了vue-router鉤子函數(shù)實現(xiàn)路由守衛(wèi),對vue感興趣的同學(xué),可以參考下
    2021-04-04
  • 關(guān)于antd中select搜索框改變搜索值的問題

    關(guān)于antd中select搜索框改變搜索值的問題

    這篇文章主要介紹了關(guān)于antd中select搜索框改變搜索值的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue 3集成??礧eb插件實現(xiàn)視頻監(jiān)控功能

    Vue 3集成??礧eb插件實現(xiàn)視頻監(jiān)控功能

    本文詳細(xì)介紹了如何使用 Vue 3 框架集成??礧eb插件實現(xiàn)視頻監(jiān)控功能,通過定義屬性、事件、變量,以及編寫初始化、播放視頻、處理節(jié)點點擊事件等方法,我們成功實現(xiàn)了視頻監(jiān)控系統(tǒng)的前端部分,感興趣的朋友一起看看吧
    2024-11-11
  • Vue手寫橫向輪播圖的實例

    Vue手寫橫向輪播圖的實例

    這篇文章主要介紹了Vue手寫橫向輪播圖的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue中調(diào)用百度地圖獲取經(jīng)緯度的實現(xiàn)

    vue中調(diào)用百度地圖獲取經(jīng)緯度的實現(xiàn)

    最近做個項目,需要實現(xiàn)獲取當(dāng)前位置的經(jīng)緯度,所以本文主要介紹了vue中調(diào)用百度地圖獲取經(jīng)緯度的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

台东市| 宁城县| 施秉县| 五莲县| 吴江市| 盐津县| 西乌| 永春县| 浦城县| 宜君县| 女性| 连州市| 通海县| 孟村| 苍梧县| 新宾| 甘南县| 来安县| 贡觉县| 河东区| 汾阳市| 肥乡县| 晋中市| 乌拉特后旗| 烟台市| 修水县| 远安县| 抚顺县| 改则县| 柏乡县| 三台县| 石林| 任丘市| 伊宁市| 丹江口市| 焉耆| 南陵县| 青冈县| 荔波县| 英山县| 西贡区|