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

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

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

一、背景

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

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

三、實現(xiàn)思路

根據(jù)需求,準備采用CSS(transition)結合JS(setTimeout)的方案進行實現(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框架,上面代碼中用到一個關閉icon(a-icon)標簽,可作替換。

  • 接下來是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ù)自己項目需求進行調整。

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

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

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

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

  • 最后記得在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ù)組的當前元素
    },
    // 滾動動畫
    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)
    },
    // 鼠標移上去停止
    stop() {
      clearInterval(this.timer)
    },
    // 鼠標離開繼續(xù)
    up() {
      this.scrollUp()
    }
  }
}
</script>

五、總結

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

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

相關文章

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

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

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

    Vue3中的ref和reactive響應式原理解析

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

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

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

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

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

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

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

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

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

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

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

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

    導航守衛(wèi)就是路由跳轉前、中、后過程中的一些鉤子函數(shù),本文詳細的介紹了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)帶有阻尼下拉加載的功能示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論

太白县| 城步| 三都| 沙洋县| 许昌市| 阿瓦提县| 通海县| 宽城| 包头市| 两当县| 宣威市| 兴安盟| 靖江市| 高密市| 吐鲁番市| 兴安盟| 西乡县| 山西省| 七台河市| 长沙县| 哈尔滨市| 长宁县| 汕头市| 赣州市| 桂林市| 涿州市| 个旧市| 修武县| 贵溪市| 忻州市| 区。| 安庆市| 金华市| 灵山县| 连南| 安庆市| 桑植县| 白河县| 韩城市| 江孜县| 无极县|