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

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

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

一、背景

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

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

三、實現(xiàn)思路

根據(jù)需求,準(zhǔn)備采用CSS(transition)結(jié)合JS(setTimeout)的方案進(jìn)行實現(xiàn),因為功能比較簡單,所以沒有使用第三方插件,也方便自定義樣式。

四、實現(xiàn)方法

  • 首先我們先實現(xiàn)樣式,看下html的實現(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>

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

  • 接下來是css的實現(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實現(xiàn)各項功能:
  • 首先實現(xiàn) 每條消息間隔10秒逐級消失逐級上浮 功能:
// 滾動動畫
scrollUp() {
  // 每個消息展示10s
  this.timer = setInterval(() => {
    this.animate = true // 向上滾動的時候需要添加動畫
    setTimeout(() => {
      this.newsList.push(this.newsList[0])// 將數(shù)組的第一個元素添加到數(shù)組最后一個
      this.newsList.shift() // 刪除數(shù)組的第一個元素
      this.animate = false
    }, 500)
  }, 10000)
},

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

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

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

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

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

  • 最后記得在beforeDestroy生命周期中清除計時器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() {
      // 每個消息展示10s
      this.timer = setInterval(() => {
        this.animate = true // 向上滾動的時候需要添加動畫
        setTimeout(() => {
          this.newsList.push(this.newsList[0])// 將數(shù)組的第一個元素添加到數(shù)組最后一個
          this.newsList.shift() // 刪除數(shù)組的第一個元素
          this.animate = false
        }, 500)
      }, 10000)
    },
    // 鼠標(biāo)移上去停止
    stop() {
      clearInterval(this.timer)
    },
    // 鼠標(biāo)離開繼續(xù)
    up() {
      this.scrollUp()
    }
  }
}
</script>

五、總結(jié)

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

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

相關(guān)文章

  • vue中v-model和.sync修飾符的區(qū)別

    vue中v-model和.sync修飾符的區(qū)別

    在平時開發(fā)是經(jīng)常用到一些父子組件通信,經(jīng)常用到props、vuex等等,下面這篇文章主要給大家介紹了關(guān)于vue中v-model和.sync修飾符區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Vue3中的ref和reactive響應(yīng)式原理解析

    Vue3中的ref和reactive響應(yīng)式原理解析

    這篇文章主要介紹了Vue3中的ref和reactive響應(yīng)式,本節(jié)主要介紹了響應(yīng)式變量和對象,以及變量和對象在響應(yīng)式和非響應(yīng)式之間的轉(zhuǎn)換,需要的朋友可以參考下
    2022-08-08
  • 手把手教你使用vue-cli腳手架(圖文解析)

    手把手教你使用vue-cli腳手架(圖文解析)

    本篇文章主要介紹了手把手教你使用vue-cli腳手架(圖文解析),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Vue實現(xiàn)英文字母大小寫在線轉(zhuǎn)換功能

    Vue實現(xiàn)英文字母大小寫在線轉(zhuǎn)換功能

    在Web開發(fā)中,字符串處理是常見的需求之一,特別是在國際化應(yīng)用中,對于文本的格式化處理尤為重要,本文將介紹如何使用Vue.js來構(gòu)建一個簡單的在線英文字母大小寫轉(zhuǎn)換工具,需要的朋友可以參考下
    2024-09-09
  • Vue實現(xiàn)表格數(shù)據(jù)的增刪改查的示例代碼

    Vue實現(xiàn)表格數(shù)據(jù)的增刪改查的示例代碼

    Vue是一個用于構(gòu)建用戶界面的JavaScript框架,在Vue中可以通過使用Vue組件來實現(xiàn)對表格的增刪改查操作,下面將介紹一些基礎(chǔ)的Vue組件和技術(shù)來實現(xiàn)對表格的增刪改查操作,需要的朋友可以參考下
    2024-08-08
  • vue 代碼高亮插件全面對比測評

    vue 代碼高亮插件全面對比測評

    這篇文章主要介紹了vue 代碼高亮插件全面對比測評的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • vue實現(xiàn)輸入框自動跳轉(zhuǎn)功能

    vue實現(xiàn)輸入框自動跳轉(zhuǎn)功能

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)輸入框自動跳轉(zhuǎn)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Vue中路由守衛(wèi)的具體使用

    Vue中路由守衛(wèi)的具體使用

    導(dǎo)航守衛(wèi)就是路由跳轉(zhuǎn)前、中、后過程中的一些鉤子函數(shù),本文詳細(xì)的介紹了Vue中路由守衛(wèi)的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • vue項目環(huán)境變量配置的實現(xiàn)方法

    vue項目環(huán)境變量配置的實現(xiàn)方法

    這篇文章主要介紹了vue項目環(huán)境變量配置的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • vue2實現(xiàn)帶有阻尼下拉加載的功能

    vue2實現(xiàn)帶有阻尼下拉加載的功能

    這篇文章主要為大家介紹了vue2實現(xiàn)帶有阻尼下拉加載的功能示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評論

乌审旗| 东乡族自治县| 广饶县| 平凉市| 怀来县| 瑞丽市| 光山县| 敦煌市| 乌鲁木齐县| 太康县| 马山县| 庐江县| 银川市| 铁力市| 玛多县| 喀喇| 墨竹工卡县| 乐山市| 隆德县| 息烽县| 耿马| 东平县| 华容县| 洞头县| 莆田市| 绥中县| 桑日县| 呼图壁县| 永寿县| 彩票| 盐边县| 夏邑县| 大庆市| 会宁县| 隆回县| 阿合奇县| 香河县| 昌都县| 崇州市| 北安市| 喀喇|