日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uniapp 聊天记录插入的两种方式

發布時間:2024/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uniapp 聊天记录插入的两种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:歷史消息記錄添加后 會不在之前瀏覽的地方

  • 上拉加載 加載添加的內容 滾動條 動(滾動條和頂部的距離變了) 顯示的還是加載前的內容
  • 下拉加載 加載添加的內容 滾動條 沒動(滾動條和頂部的距離沒變) 顯示的是新加載的內容

解決思路一 滾動條距離頂部的高度

  • 添加元素之前獲取與底部的距離 底部的距離 = 元素.scrollHeight - 元素.scrollTop
  • 添加元素之后元素的滾動條高度 scrollTop = 元素.scrollHeight - 底部的距離
  • 元素滾動上去的距離就是現在的總高度減去剛剛的固定底部
<template><view class="content"><!-- 主體部分 --><view class="main"><scroll-view scroll-y="true" :upper-threshold="a":scroll-top="sTop"@scrolltoupper="scrolltoupper" @scrolltolower="scrolltolower" @scroll="scroll"><view class="loading"><text>沒有更多數據了</text></view><view v-for="(item,index) in list" :id="'a_'+index" :key="index">{{item.id}}</view></scroll-view></view></view> </template><script>import AppHeader from "@/components/app-header.vue";export default {components: { AppHeader },data() {return {a: 100, // 觸發頂部加載方法的距離 可不寫 默認50sTop: '0', // 滾動條的位置list: [{id:1},{id:2},{id:3},{id:4}]};},created() {this.newScrollHeight = 0; // 記錄新的高度this.oldScrollHeight = 0; // 記錄原先的高度this.scrollTop = 0; // 記錄 底部的距離},methods: {scrolltoupper: function(e) {let arr = []for(let i = -1; i >= -4; --i){arr.unshift({id: this.list[0].id-1 + i})}// this.list.concat(arr)this.list.unshift(...arr);this.scrollIntoIndex = `a_${20}`},/*** 問題:* 上拉加載 加載添加的內容 滾動條 動(滾動條和頂部的距離變了) 顯示的還是加載前的內容* 下拉加載 加載添加的內容 滾動條 沒動(滾動條和頂部的距離沒變) 顯示的是新加載的內容* 解決思路:* 與上拉加載反過來, 那就是保證滾動條與底部的距離不變* 添加元素之前獲取與底部的距離 底部的距離 = 元素.scrollHeight - 元素.scrollTop* 添加元素之后元素的滾動條高度 元素.scrollTop = 元素.scrollHeight - 底部的距離* * 元素滾動上去的距離就是現在的總高度減去剛剛的固定底部* scrollHeight: 滾動條總高度 scrollTop: 滾動條距離頂部的高度* */scroll: function(e) {const SCROLL_HEIGHT = e.target.scrollHeight; // 當前的滑動區域高度const SCROLL_TOP = e.target.scrollTop; // 滾動條位置this.newScrollHeight = SCROLL_HEIGHT;if(this.oldScrollHeight==0) {this.oldScrollHeight = this.newScrollHeight;}if(this.newScrollHeight != this.oldScrollHeight) {this.scrollTop = this.oldScrollHeight - SCROLL_TOP; // -> 計算之前滾動條離底部的距離this.sTop = this.newScrollHeight - this.scrollTop; // -> 計算滾動條因在什么位置this.oldScrollHeight = this.newScrollHeight;}}},} </script><style lang="scss"> // 主體部分 .content {background-color: $uni-bg-color;.main {// padding: 0 $uni-spacing-row-base;// box-sizing: border-box;scroll-view {width: 100%;height: 100%;overflow-anchor: auto;vertical-align: middle;display: flex;flex-direction: column-reverse;view {padding: 0 $uni-spacing-row-base;box-sizing: border-box;}view:nth-child(n) {width: 100%;height: 200rpx;background-color: antiquewhite;}view:nth-child(2n) {width: 100%;height: 250rpx;background-color: aqua;margin-top: 10rpx;}.loading {width: 100%;height: 60rpx !important;}}} } </style>

解決思路二 scroll-into-view屬性

scroll-into-view屬性 具體情況請看官方文檔 uniapp scroll-view標簽

<template><!-- 聊天頁面 --><view class="content"><!-- 主體部分 --><view class="main"><scroll-view scroll-y="true":scroll-top="scrollTop":scroll-anchoring="true"@scrolltoupper="scrolltoupper" :scroll-into-view="scrollIndex"><view class="loading"><text>沒有更多數據了</text></view><view v-for="(item,index) in list" :id="'id_'+ item.id" :key="index">{{item.id}}</view></scroll-view></view></view> </template><script>export default {data() {return {scrollTop: '0',scrollIndex: "",list: [{id:1},{id:2},{id:3},{id:4},]};},created() {this.first = 'id_1';// 不在created中調用的給方法的話 第一次觸頂 不會被定位 可以去掉這句 取updated中打印下scrollIndex 第一次觸頂 只會渲染更新一次 之后都會更新兩次this.scrolltoupper();},methods: {scrolltoupper: function(e) {let arr = [];this.first = `id_${this.list[0].id}`;for(let i = -1; i >= -4; --i){arr.unshift({id: this.list[0].id-1 + i})}this.list.unshift(...arr);// 此處用 nextTick 是因為需要保證 頁面以及渲染完成 也可以在 updated 鉤子中執行賦值// 沒有中一句的話不會定位到之前的位置this.$nextTick(()=>{this.scrollIndex = this.first;})}},} </script><style lang="scss"> // 主體部分 .content {background-color: $uni-bg-color;.main {// padding: 0 $uni-spacing-row-base;// box-sizing: border-box;scroll-view {width: 100%;height: calc(100% - 0rpx);overflow-anchor: auto;vertical-align: middle;display: flex;flex-direction: column-reverse;view {padding: 0 $uni-spacing-row-base;box-sizing: border-box;}view:nth-child(n) {width: 100%;height: 200rpx;background-color: antiquewhite;}view:nth-child(2n) {width: 100%;height: 250rpx;background-color: aqua;margin-top: 10rpx;}.loading {width: 100%;height: 60rpx !important;}}} } </style>

總結

以上是生活随笔為你收集整理的uniapp 聊天记录插入的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野吉衣在线观看视频 | 强制憋尿play黄文尿奴 | 69精品视频 | 中文字幕二区 | 黄色特级视频 | 欧美xxxx少妇 | 色婷婷av一区二区三区大白胸 | 在线免费视频一区二区 | 日韩av网址大全 | 国产精品久久久久久久久久久久久久 | 欧美日韩国产专区 | 成人黄色小说视频 | 国产精品对白刺激久久久 | 国产欧美精品一区二区三区 | 国产精品久久久久久久久久久久久久久久久久 | 亚洲人成免费电影 | 国产电影一区在线观看 | 精品久久久久久久久久久久久久久久久久 | 亚洲午夜久久久 | 激情无码人妻又粗又大 | 成人激情av| 免费九九视频 | 国产艳俗歌舞表演hd | 动漫艳母在线观看 | 日屁视频 | 国产3页 | 欧美一区三区二区在线观看 | 成人国产av一区二区三区 | 99精品热| 亚洲天堂一区在线观看 | 啪啪小视频 | 国产97超碰| 亚洲成人黄色网 | 亚洲精品热 | 蜜臀久久99精品久久久久久 | 韩国伦理在线视频 | a天堂资源在线观看 | 国产女主播视频 | 影音先锋美女 | 国内av片| 美女视频在线观看免费 | 日韩精品网站 | 国产精品久久久久久白浆 | 蜜臀久久久久久999 大陆熟妇丰满多毛xxxⅹ | 伊人久久九 | 男人操女人网站 | 亚洲成人a∨ | 精品国产一区二区不卡 | www.人人草 | 欧美综合视频在线观看 | 午夜看片在线观看 | 久久视频网 | 欧美亚洲日本一区 | 欧美日韩一区二区三区在线电影 | 成人黄色在线 | 国产精品激情偷乱一区二区∴ | 精品国产AV色欲天媒传媒 | 91精品久久久久久久久中文字幕 | chinese hd av| 毛片视频免费 | 天天上天天干 | 亚洲人和日本人hd | 五月的婷婷| 亚洲激情自拍 | 一区二区三区欧美精品 | 青青久在线 | 午夜影视在线观看 | 黄瓜视频在线免费看 | 丰满人妻一区二区三区大胸 | 激情婷婷丁香 | 国内自拍偷拍 | 欧美三区四区 | 欧美粗暴se喷水 | 日本一本高清 | 91在线观看免费高清完整版在线观看 | av一二区| 男女互操| 青草草在线观看 | 亚洲大尺度av| 精品少妇一区二区三区 | 91精品国产91综合久久蜜臀 | a资源在线 | 夜夜躁日日躁狠狠久久av | 艳母免费在线观看 | 森林影视官网在线观看 | 欧美一级黄| 中文字幕一区二区三区乱码不卡 | 国产女主播在线 | 国产精品黄色在线观看 | 日本伊人网 | 五月天导航 | 尤物91| 公肉吊粗大爽色翁浪妇视频 | 国产精品久久一区二区三区 | 日韩色图视频 | 91精品国产一区二区三区香蕉 | 一区二区三区视频播放 | 艳母在线视频 | 久久久久久久久久一区二区 |