亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue實(shí)現(xiàn)消息列表向上無縫滾動效果

 更新時(shí)間:2024年06月02日 08:38:50   作者:小蹦跶兒  
本文主要實(shí)現(xiàn)vue項(xiàng)目中,消息列表逐條向上無縫滾動,每條消息展示10秒后再滾動,為了保證用戶能看清消息主題,未使用第三方插件,本文實(shí)現(xiàn)方法比較簡約,需要的朋友可以參考下

一、背景

最近產(chǎn)品有個(gè)需求:后臺系統(tǒng)的未讀消息,在用戶登陸后,將未讀信息在右側(cè)浮窗無縫滾動;不關(guān)閉時(shí),間隔10秒逐級消失逐級上浮,每次只展示一條消息;支持手動關(guān)閉浮窗;支持單擊浮窗打開相應(yīng)消息。

二、需要實(shí)現(xiàn)的效果

三、實(shí)現(xiàn)思路

根據(jù)需求,準(zhǔn)備采用CSS(transition)結(jié)合JS(setTimeout)的方案進(jìn)行實(shí)現(xiàn),因?yàn)楣δ鼙容^簡單,所以沒有使用第三方插件,也方便自定義樣式。

四、實(shí)現(xiàn)方法

  • 首先我們先實(shí)現(xiàn)樣式,看下html的實(shí)現(xiàn)代碼:

代碼如下圖:

<template>
  <div :class="{anim:animate}" @mouseenter="stop()" @mouseleave="up()" class="unreadMsg">
    <div class="news_name" v-for="(item, index) in newsList" :key="item.id" @click="handleDetail(item)">
      <div class="content">
        <div class="title">{{ item.title }}</div>
        <div class="des">{{ item.description }}</div>
      </div>
      <span @click="handleDelete(item, index)" class="close">
        <a-icon type="close" style="cursor: pointer" />
      </span>
    </div>
 </div>
</template>

注:我的項(xiàng)目是ant-vue框架,上面代碼中用到一個(gè)關(guān)閉icon(a-icon)標(biāo)簽,可作替換。

  • 接下來是css的實(shí)現(xiàn)代碼:
<style lang="less" scoped>
.unreadMsg {
  max-height: 132px;
  overflow: hidden;
  position: absolute;
  right: 0;
  top: 0;
  bottom: auto;
  margin-inline-end: 24px;

  .news_name {
    line-height: 30px;
    transition: top 0.5s;
    transition-delay: 10s;
    position: relative;

    .content {
      position: relative;
      width: 384px;
      margin-bottom: 40px;
      margin-inline-start: auto;
      padding: 20px 30px;
      overflow: hidden;
      word-wrap: break-word;
      background: #fff;
      border-radius: 8px;

      .title {
        padding-right: 12px;
        margin-bottom: 8px;
        color: rgba(0, 0, 0, 0.88);
        font-size: 16px;
        line-height: 1.5;
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
      }

      .des {
        font-size: 14px;
        cursor: pointer;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
      }
    }

    .close {
      position: absolute;
      top: 20px;
      inset-inline-end: 24px;
      color: rgba(0, 0, 0, 0.45);
      outline: none;
      width: 22px;
      height: 22px;
      border-radius: 4px;
      transition: background-color 0.2s, color 0.2s;
      display: flex;
      align-items: center;
      justify-content: center;
    }
  }
}
.anim {
  transition: all 0.5s;
  margin-top: -110px;
}
</style>
  • 最后通過js實(shí)現(xiàn)各項(xiàng)功能:
  • 首先實(shí)現(xiàn) 每條消息間隔10秒逐級消失逐級上浮 功能:
// 滾動動畫
scrollUp() {
  // 每個(gè)消息展示10s
  this.timer = setInterval(() => {
    this.animate = true // 向上滾動的時(shí)候需要添加動畫
    setTimeout(() => {
      this.newsList.push(this.newsList[0])// 將數(shù)組的第一個(gè)元素添加到數(shù)組最后一個(gè)
      this.newsList.shift() // 刪除數(shù)組的第一個(gè)元素
      this.animate = false
    }, 500)
  }, 10000)
},

需要注意到是,這個(gè)滾動動畫的方法,需要在mounted生命周期中執(zhí)行,在created生命周期中請求后端接口,獲取未讀消息的list數(shù)組。
另:此處的10s可根據(jù)自己項(xiàng)目需求進(jìn)行調(diào)整。

  • 實(shí)現(xiàn) 單擊浮窗打開相應(yīng)消息 功能:
handleDetail(item) {
  this.$router.push({ name: 'noticeDetailService', params: { id: item.id } })
 },

這里只要點(diǎn)擊對應(yīng)的消息,跳轉(zhuǎn)到這個(gè)消息具體的詳情頁即可。因?yàn)槊總€(gè)消息都會有自己對應(yīng)的ID,不用多說,都懂。

  • 實(shí)現(xiàn) 手動關(guān)閉當(dāng)前的消息 功能:
handleDelete(item, index) {
  this.newsList.splice(index, 1) // 刪除數(shù)組的當(dāng)前元素
},

此處主要考慮的問題是,有的消息用戶不想點(diǎn)開看詳情,也不想看它在輪播,想直接關(guān)掉。只需要刪除數(shù)組中的當(dāng)前元素即可。

  • 最后記得在beforeDestroy生命周期中清除計(jì)時(shí)器clearInterval

  • 下面將js的全部代碼附上:

<script>
import { noticeSearch } from '../api/index.js'

export default {
  name: 'unreadMsg',
  data() {
    return {
      timer: null,
      animate: false,
      newsList: []
    }
  },
  created() {
    this.noticeSearch()
  },
  mounted() {
    this.scrollUp() // 開啟滾動效果
  },
  beforeDestroy() {
    this.stop()
  },
  methods: {
    async noticeSearch () {
      const data = await noticeSearch({ size: -1 })
      this.newsList = data.list
    },
    // 查看公告詳情
    handleDetail(item) {
      this.$router.push({ name: 'noticeDetailService', params: { id: item.id } })
    },
    handleDelete(item, index) {
      this.newsList.splice(index, 1) // 刪除數(shù)組的當(dāng)前元素
    },
    // 滾動動畫
    scrollUp() {
      // 每個(gè)消息展示10s
      this.timer = setInterval(() => {
        this.animate = true // 向上滾動的時(shí)候需要添加動畫
        setTimeout(() => {
          this.newsList.push(this.newsList[0])// 將數(shù)組的第一個(gè)元素添加到數(shù)組最后一個(gè)
          this.newsList.shift() // 刪除數(shù)組的第一個(gè)元素
          this.animate = false
        }, 500)
      }, 10000)
    },
    // 鼠標(biāo)移上去停止
    stop() {
      clearInterval(this.timer)
    },
    // 鼠標(biāo)離開繼續(xù)
    up() {
      this.scrollUp()
    }
  }
}
</script>

五、總結(jié)

功能雖簡單,需要注意的點(diǎn)也很多,要記得在對應(yīng)的生命周期做對應(yīng)的操作。用到定時(shí)器的地方也要記得進(jìn)行清除。

以上就是vue實(shí)現(xiàn)消息列表向上無縫滾動的詳細(xì)內(nèi)容,更多關(guān)于vue列表滾動的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • element表單驗(yàn)證如何清除校驗(yàn)提示語

    element表單驗(yàn)證如何清除校驗(yàn)提示語

    本文主要介紹了element表單驗(yàn)證如何清除校驗(yàn)提示語,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Vuex?Actions多參數(shù)傳遞的解決方案

    Vuex?Actions多參數(shù)傳遞的解決方案

    在?Vuex?中,actions?的設(shè)計(jì)默認(rèn)只支持單個(gè)參數(shù)傳遞,這有時(shí)會限制我們的使用場景,下面我將詳細(xì)介紹幾種處理多參數(shù)傳遞的解決方案,從基礎(chǔ)到高級,幫助您靈活應(yīng)對各種需求,需要的朋友可以參考下
    2025-04-04
  • Vue?Mock.js介紹和使用與首頁導(dǎo)航欄左側(cè)菜單搭建過程

    Vue?Mock.js介紹和使用與首頁導(dǎo)航欄左側(cè)菜單搭建過程

    Mock.js是一個(gè)模擬數(shù)據(jù)的生成器,用來幫助前端調(diào)試開發(fā)、進(jìn)行前后端的原型分離以及用來提高自動化測試效率,這篇文章主要介紹了Vue?Mock.js介紹和使用與首頁導(dǎo)航欄左側(cè)菜單搭建,需要的朋友可以參考下
    2023-09-09
  • vue實(shí)現(xiàn)選中效果

    vue實(shí)現(xiàn)選中效果

    本文給大家分享的是如何使用vue實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊選中的效果,附上了實(shí)例代碼,有需要的小伙伴可以參考下
    2020-10-10
  • 詳解vue前后臺數(shù)據(jù)交互vue-resource文檔

    詳解vue前后臺數(shù)據(jù)交互vue-resource文檔

    本篇文章主要介紹了vue前后臺數(shù)據(jù)交互vue-resource文檔,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 關(guān)于vue 的slot分發(fā)內(nèi)容 (多個(gè)分發(fā))

    關(guān)于vue 的slot分發(fā)內(nèi)容 (多個(gè)分發(fā))

    這篇文章主要介紹了關(guān)于vue 的slot分發(fā)內(nèi)容 (多個(gè)分發(fā)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何在Vue項(xiàng)目中應(yīng)用TypeScript類

    如何在Vue項(xiàng)目中應(yīng)用TypeScript類

    與如何在React項(xiàng)目中應(yīng)用TypeScript類類似在VUE項(xiàng)目中應(yīng)用typescript,我們需要引入一個(gè)庫vue-property-decorator,需要的小伙伴可續(xù)看下文具體介紹
    2021-09-09
  • vue+echarts實(shí)現(xiàn)動態(tài)繪制圖表及異步加載數(shù)據(jù)的方法

    vue+echarts實(shí)現(xiàn)動態(tài)繪制圖表及異步加載數(shù)據(jù)的方法

    vue寫的后臺管理,需要將表格數(shù)據(jù)繪制成圖表(折線圖,柱狀圖),圖表數(shù)據(jù)都是通過接口請求回來的。這篇文章主要介紹了vue+echarts 動態(tài)繪制圖表及異步加載數(shù)據(jù)的相關(guān)知識,需要的朋友可以參考下
    2018-10-10
  • 淺談在不使用ssr的情況下解決Vue單頁面SEO問題(2)

    淺談在不使用ssr的情況下解決Vue單頁面SEO問題(2)

    這篇文章主要介紹了淺談在不使用ssr的情況下解決Vue單頁面SEO問題(2),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • vue執(zhí)行配置選項(xiàng)npm?run?serve的本質(zhì)圖文詳解

    vue執(zhí)行配置選項(xiàng)npm?run?serve的本質(zhì)圖文詳解

    本地開發(fā)一般通過執(zhí)行npm run serve命令來啟動項(xiàng)目,那這行命令到底存在什么魔法?下面這篇文章主要給大家介紹了關(guān)于vue執(zhí)行配置選項(xiàng)npm?run?serve的本質(zhì)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05

最新評論