Vue3.0手寫輪播圖效果
更新時間:2021年10月28日 17:12:44 作者:Youyzq
這篇文章主要為大家詳細介紹了Vue3.0手寫輪播圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Vue3.0手寫輪播圖效果的具體代碼,供大家參考,具體內(nèi)容如下
讓我們開始把
html結(jié)構(gòu)
<template> <div class="xtx-carousel" @mouseleave="enterFn" @mouseenter="leaveFn"> <ul class="carousel-body"> <li class="carousel-item " :class="{ fade: indexid === index }" v-for="(item, index) in list" :key="item.id"> <RouterLink to="/"> <img :src="item.imgUrl" alt="" /> </RouterLink> </li> </ul> <a href="javascript:;" class="carousel-btn prev" @click="lastPage"><i class="iconfont icon-angle-left"></i></a> <a href="javascript:;" class="carousel-btn next" @click="nextPage"><i class="iconfont icon-angle-right"></i></a> <div class="carousel-indicator"> <span @click="indexid = i - 1" v-for="i in list.length" :key="i" :class="{ active: indexid === i - 1 }"></span> </div> </div> </template>
js語法
<script> import { ref, watch, onUnmounted } from 'vue' export default { name: 'Carousel', props: { // 圖片數(shù)據(jù) list: { type: Object, default: () => {} }, // 輪播圖每張切換的事件 duration: { type: Number, default: 2 }, // 是否開啟輪播圖 autoplay: { type: Boolean, default: true }, // 點擊翻幾張 page: { type: Number, default: 1 } }, setup(props) { // 索引 const indexid = ref(0) // 輪播 const timer = ref(null) const TimeFn = () => { clearInterval(timer) // 每次執(zhí)行前都清除上一次的定時器 timer.value = setInterval(() => { indexid.value++ // 如果超出界限就重新回填 if (indexid.value > props.list.length - 1) { indexid.value = 0 } }, props.duration * 1000) } // 點擊+下一站圖片 const nextPage = () => { indexid.value += props.page if (indexid.value > props.list.length - 1) { indexid.value = 0 } } // 點擊+上一張圖片 const lastPage = () => { indexid.value -= props.page if (indexid.value < 0) { indexid.value = props.list.length - 1 } } // 清除定時器 const leaveFn = () => { // console.log('清除定時器') clearInterval(timer.value) // console.log(timer) } // 組件消耗,清理定時器 onUnmounted(() => { clearInterval(timer.value) }) // 開啟定時器 const enterFn = () => { if (props.list.length > 1 && props.autoplay) { // console.log('開啟定時器') TimeFn() } } watch( () => props.list, () => { if (props.list.length > 1 && props.autoplay) { TimeFn() } } ) return { indexid, leaveFn, enterFn, nextPage, lastPage } } } </script>
css樣式
<style scoped lang="less"> .xtx-carousel { width: 100%; height: 100%; min-width: 300px; min-height: 150px; position: relative; .carousel { &-body { width: 100%; height: 100%; } &-item { width: 100%; height: 100%; position: absolute; left: 0; top: 0; opacity: 0; transition: opacity 0.5s linear; &.fade { opacity: 1; z-index: 1; } img { width: 100%; height: 100%; } } &-indicator { position: absolute; left: 0; bottom: 20px; z-index: 2; width: 100%; text-align: center; span { display: inline-block; width: 12px; height: 12px; background: rgba(0, 0, 0, 0.2); border-radius: 50%; cursor: pointer; ~ span { margin-left: 12px; } &.active { background: #fff; } } } &-btn { width: 44px; height: 44px; background: rgba(0, 0, 0, 0.2); color: #fff; border-radius: 50%; position: absolute; top: 228px; z-index: 2; text-align: center; line-height: 44px; opacity: 0; transition: all 0.5s; &.prev { left: 20px; } &.next { right: 20px; } } } &:hover { .carousel-btn { opacity: 1; } } } </style>
注冊成全局插件
import Carousel from '../carousel.vue' // vue2.0插件寫法要素:導(dǎo)出一個對象,有install函數(shù),默認傳入了Vue構(gòu)造函數(shù),Vue基礎(chǔ)之上擴展 // vue3.0插件寫法要素:導(dǎo)出一個對象,有install函數(shù),默認傳入了app應(yīng)用實例,app基礎(chǔ)之上擴展 export default { install(app) { // 在app上進行擴展,app提供 component directive 函數(shù) // 如果要掛載原型 app.config.globalProperties 方式 app.component(Carousel.name, xtxCarousel) } }
在main.js入口文件掛載
import { createApp } from 'vue' import App from './App.vue' import router from './router' import store from './store' import libraryUI from '@/components/library/index' //自己的插件 createApp(App) .use(store) .use(router) .use(libraryUI) // 掛載插件 .mount('#app')
如何使用插件呢?
<Carousel :list="list" duration="1" />
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue3?+?Ant?Design?實現(xiàn)雙表頭表格的效果(橫向表頭+縱向表頭)
這篇文章主要介紹了vue3?+?Ant?Design?實現(xiàn)雙表頭表格(橫向表頭+縱向表頭),需要的朋友可以參考下2023-12-12vue3?element-plus?實現(xiàn)表格數(shù)據(jù)更改功能詳細步驟
這篇文章主要介紹了vue3 element-plus實現(xiàn)表格數(shù)據(jù)更改功能,本文分步驟結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07Vue $mount實戰(zhàn)之實現(xiàn)消息彈窗組件
這篇文章主要介紹了Vue $mount實現(xiàn)消息彈窗組件的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-04-04