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

vue實(shí)現(xiàn)自動(dòng)滑動(dòng)輪播圖片

 更新時(shí)間:2022年03月03日 08:06:49   作者:theMuseCatcher  
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)自動(dòng)滑動(dòng)輪播圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了vue實(shí)現(xiàn)自動(dòng)滑動(dòng)輪播圖片的具體代碼,供大家參考,具體內(nèi)容如下

效果如圖:(懸浮時(shí)暫停,移出后自動(dòng)輪播)

①創(chuàng)建圖片滑動(dòng)輪播組件ImageSlider.vue,可設(shè)置輪播間隔interval,當(dāng)頁面沒被激活(用戶沒在瀏覽當(dāng)前頁面)時(shí),自動(dòng)暫停,重新瀏覽當(dāng)前頁面(被激活)時(shí),自動(dòng)輪播

<template>
? <div class="m-slider" @mouseenter="onStop" @mouseleave="onStart">
? ? <div class="m-panel" ref="slider" :style="`width: ${width}px;`">
? ? ? <div
? ? ? ? v-for="(item, index) in imageData"
? ? ? ? :key="index"
? ? ? ? class="m-image">
? ? ? ? <img :src="item.src" :alt="item.title"/>
? ? ? ? <p class="u-img-title" :title="item.title">{{ item.title }}</p>
? ? ? </div>
? ? ? <div class="m-image">
? ? ? ? <img :src="imageData[0].src" :alt="imageData[0].title"/>
? ? ? ? <p class="u-img-title" :title="imageData[0].title">{{ imageData[0].title }}</p>
? ? ? </div>
? ? </div>
? </div>
</template>
<script>
export default {
? name: 'ImageSlider',
? props: {
? ? imageData: { // 圖片數(shù)組
? ? ? type: Array,
? ? ? default: () => {
? ? ? ? return []
? ? ? }
? ? },
? ? interval: { // 滑動(dòng)輪播間隔
? ? ? type: Number,
? ? ? default: 3000
? ? }
? },
? data () {
? ? return {
? ? ? visibilityChangeEvent: '',
? ? ? timer: null,
? ? ? imgWidth: 400, // 圖片寬度,用于生成容器寬度
? ? ? activeIndex: 0 // 當(dāng)前展示的圖片
? ? }
? },
? computed: {
? ? width () {
? ? ? return (this.imageData.length + 1) * this.imgWidth
? ? }
? },
? created () {
? ? var hiddenProperty = 'hidden' in document ? 'hidden'
? ? ? : 'webkitHidden' in document ? 'webkitHidden'
? ? ? ? : 'mozHidden' in document ? 'mozHidden'
? ? ? ? ? : null
? ? this.visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange')
? ? var onVisibilityChange = () => {
? ? ? if (!document[hiddenProperty]) {
? ? ? ? this.onStart()
? ? ? ? console.log('頁面激活')
? ? ? } else {
? ? ? ? this.onStop()
? ? ? ? console.log('頁面非激活')
? ? ? }
? ? }
? ? document.addEventListener(this.visibilityChangeEvent, onVisibilityChange)
? ? setTimeout(() => {
? ? ? this.timer = setInterval(() => { // 自動(dòng)切換
? ? ? ? this.onMove()
? ? ? }, this.interval)
? ? }, this.interval)
? },
? methods: {
? ? // 滑動(dòng)動(dòng)畫效果
? ? slideEffect (target) {
? ? ? const offsetLeft = this.$refs.slider.offsetLeft // 求出元素的當(dāng)前偏移位置
? ? ? let step = (target - offsetLeft) / 10 // 由快到慢的過渡效果
? ? ? step = step > 0 ? Math.ceil(step) : Math.floor(step) // 對(duì)每次移動(dòng)的距離取整,ceil:向上取整,floor:向下取整
? ? ? setTimeout(() => {
? ? ? ? if (target !== offsetLeft) {
? ? ? ? ? this.$refs.slider.style.left = offsetLeft + step + 'px' // 移動(dòng)
? ? ? ? ? this.slideEffect(target)
? ? ? ? }
? ? ? }, 15) // 每隔15ms執(zhí)行一次
? ? },
? ? onSlider (moveX) {
? ? ? const offset = this.$refs.slider.offsetLeft
? ? ? const target = offset + moveX // 要移動(dòng)的目標(biāo)位置
? ? ? this.slideEffect(target)
? ? },
? ? onMove () {
? ? ? if (this.activeIndex === this.imageData.length - 1) { // 最后一張
? ? ? ? this.activeIndex = 0 // 顯示第一張
? ? ? ? this.$refs.slider.style.left = 0
? ? ? ? this.onSlider(-this.imgWidth)
? ? ? } else {
? ? ? ? this.activeIndex++ // 顯示下一張
? ? ? ? this.onSlider(-this.imgWidth)
? ? ? }
? ? },
? ? onStop () {
? ? ? clearInterval(this.timer)
? ? ? this.timer = null
? ? },
? ? onStart () {
? ? ? clearInterval(this.timer)
? ? ? this.timer = setInterval(() => {
? ? ? ? this.onMove()
? ? ? }, this.interval)
? ? },
? ? beforeDestroy () {
? ? ? document.removeEventListener(this.visibilityChangeEvent)
? ? ? clearInterval(this.timer)
? ? ? this.timer = null
? ? }
? }
}
</script>
<style lang="less" scoped>
@themeColor: #D93844;
.m-slider {
? margin: 100px auto;
? width: 400px;
? height: 300px;
? overflow: hidden;
? position: relative;
? .m-panel {
? ? position: absolute;
? ? top: 0;
? ? left: 0;
? ? // width: 1600px; // (圖片數(shù)組長(zhǎng)度+1) * 圖片寬度
? ? height: 300px;
? ? .m-image {
? ? ? float: left;
? ? ? width: 400px;
? ? ? height: 300px;
? ? ? img {
? ? ? ? width: 400px;
? ? ? ? height: 270px;
? ? ? ? cursor: pointer;
? ? ? }
? ? ? .u-img-title {
? ? ? ? width: 400px;
? ? ? ? font-size: 16px;
? ? ? ? color: #333;
? ? ? ? line-height: 30px;
? ? ? ? overflow: hidden;
? ? ? ? text-align: left;
? ? ? ? cursor: pointer;
? ? ? ? text-overflow: ellipsis;
? ? ? ? display: -webkit-box;
? ? ? ? -webkit-box-orient: vertical;
? ? ? ? -webkit-line-clamp: 1;
? ? ? ? &:hover {
? ? ? ? ? font-size: 16px;
? ? ? ? ? color: @themeColor;
? ? ? ? }
? ? ? }
? ? }
? }
}
</style>

②在要使用滑動(dòng)輪播圖片的頁面引入使用組件,并傳入圖片數(shù)組

<ImageSlider :imageData="imageData" :interval="3000" />
import ImageSlider from '@/components/ImageSlider'
components: {
? ? ImageSlider
}
data () {
? ? return {
? ? ? imageData: [
? ? ? ? {
? ? ? ? ? title: 'image-1,image-1,image-1,image-1,image-1...',
? ? ? ? ? src: '圖片地址'
? ? ? ? },
? ? ? ? {
? ? ? ? ? title: 'image-2,image-2,image-2,image-2,image-2...',
? ? ? ? ? src: '圖片地址'
? ? ? ? },
? ? ? ? {
? ? ? ? ? title: 'image-3,image-3,image-3,image-3,image-3...',
? ? ? ? ? src: '圖片地址'
? ? ? ? }
? ? ? ]
? ?}
}

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

相關(guān)文章

  • Vue.js數(shù)據(jù)綁定之data屬性

    Vue.js數(shù)據(jù)綁定之data屬性

    這篇文章主要為大家詳細(xì)介紹了Vue.js數(shù)據(jù)綁定之data屬性,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Vue+axios使用FormData方式向后端發(fā)送數(shù)據(jù)

    Vue+axios使用FormData方式向后端發(fā)送數(shù)據(jù)

    在前后端分離的項(xiàng)目中經(jīng)常使用到Vue+axios通過FormData的方式向后端發(fā)送表單數(shù)據(jù),下面就來介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下
    2023-09-09
  • ElementUI動(dòng)態(tài)渲染el-table的實(shí)現(xiàn)過程

    ElementUI動(dòng)態(tài)渲染el-table的實(shí)現(xiàn)過程

    在前端開發(fā)中,表格是不可或缺的一部分,無論是數(shù)據(jù)展示、數(shù)據(jù)錄入,還是數(shù)據(jù)分析,表格都扮演著重要的角色,而在Vue.js生態(tài)系統(tǒng)中,ElementUI提供了一個(gè)強(qiáng)大且靈活的表格組件——el-table,本文將帶你深入了解如何使用ElementUI動(dòng)態(tài)渲染el-table,并詳細(xì)探討其原理及實(shí)現(xiàn)過程
    2024-08-08
  • vue實(shí)現(xiàn)手機(jī)驗(yàn)證碼登錄

    vue實(shí)現(xiàn)手機(jī)驗(yàn)證碼登錄

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)手機(jī)驗(yàn)證碼登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • el-table表頭使用el-dropdown出現(xiàn)兩個(gè)下拉框的問題及解決方法

    el-table表頭使用el-dropdown出現(xiàn)兩個(gè)下拉框的問題及解決方法

    本文給大家分享el-table在固定右邊列時(shí),表頭使用el-dropdown會(huì)出現(xiàn)兩個(gè)下拉框的解決方法,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • VUE中Non-Props屬性的使用

    VUE中Non-Props屬性的使用

    本文主要介紹了VUE中Non-Props屬性的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 淺談Vue頁面級(jí)緩存解決方案feb-alive (下)

    淺談Vue頁面級(jí)緩存解決方案feb-alive (下)

    這篇文章主要介紹了淺談Vue頁面級(jí)緩存解決方案feb-alive(下),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Vue如何利用flex布局實(shí)現(xiàn)TV端城市列表功能

    Vue如何利用flex布局實(shí)現(xiàn)TV端城市列表功能

    用vue開發(fā)了三四個(gè)組件了,都是H5的,現(xiàn)在來看看PC是如何玩轉(zhuǎn)組件的,下面這篇文章主要給大家介紹了關(guān)于Vue如何利用flex布局實(shí)現(xiàn)TV端城市列表功能的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • Vue el使用el-checkbox-group復(fù)選框進(jìn)行單選框方式

    Vue el使用el-checkbox-group復(fù)選框進(jìn)行單選框方式

    這篇文章主要介紹了Vue el使用el-checkbox-group復(fù)選框進(jìn)行單選框方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue中使用$http.post請(qǐng)求傳參的錯(cuò)誤及解決

    vue中使用$http.post請(qǐng)求傳參的錯(cuò)誤及解決

    這篇文章主要介紹了vue中使用$http.post請(qǐng)求傳參的錯(cuò)誤及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

象山县| 呼伦贝尔市| 弥勒县| 宜丰县| 汶川县| 钟山县| 肥东县| 凤凰县| 通化县| 舟山市| 鸡泽县| 湾仔区| 呈贡县| 钟祥市| 米林县| 会昌县| 梅州市| 瑞昌市| 县级市| 唐河县| 策勒县| 华安县| 曲麻莱县| 陕西省| 涞源县| 铁岭县| 邵武市| 湖北省| 霞浦县| 黑河市| 博客| 平定县| 黄大仙区| 金川县| 弋阳县| 南宁市| 莆田市| 徐汇区| 富顺县| 乌兰浩特市| 桦川县|