使用者互動聊天,看陪玩平臺原始碼怎麼透過html實現
陪玩平臺原始碼聊天室的評論滾動效果,下劃檢視歷史訊息並停止滾動,如有新訊息會出現新訊息提醒,點選滾動到底部。
2.具體程式碼
-
{{item.name}}:
{{item.content}}
{{restComment}}條新訊息
import smoothscroll from 'smoothscroll-polyfill';
import { debounce, isScrollBottom } from '../utils/utils';
smoothscroll.polyfill(); // 移動端scrollTo behavior: "smooth"動畫失效的polyfill
export default {
data() {
return {
list: [],
restComment: 0,
restNums: 0,
wrapperDom: null,
listDom: null,
wrapperHeight: 0
};
},
mounted() {
this.initDom();
// ajax...
const data = new Array(20).fill('');
this.queue(data);
setTimeout(() => {
const list = new Array(10).fill('');
this.queue(list);
}, 30000);
},
methods: {
initDom() {
this.wrapperDom = this.$refs.wrapper;
this.listDom = this.$refs.list;
this.wrapperHeight = this.wrapperDom.offsetHeight;
},
addTimeOut(opt) {
return new Promise((resolve, reject) => {
setTimeout(() => {
this.addComment(opt);
resolve()
}, 500);
});
},
// 佇列新增訊息
async queue(data) {
for (let i = 0; i < data.length; i++) {
const opt = {
name: i + "-使用者名稱",
content: i + "-評論內容",
id: Date.now()
}
await this.addTimeOut(opt);
}
},
addScroll() {
debounce(this.listScroll, 200);
this.isBindScrolled = true;
},
listScroll() {
const ele = this.wrapperDom;
const isBottom = isScrollBottom(ele, ele.clientHeight);
if (isBottom) {
this.restNums = 0;
this.restComment = 0;
}
},
// 新增評論 如果超過150條就將前50條刪除
addComment(data) {
if (this.list.length >= 150) {
this.list.splice(0, 50);
}
this.list.push(data);
this.$nextTick(() => {
this.renderComment();
});
},
// 渲染評論
renderComment() {
const listHight = this.listDom.offsetHeight;
const diff = listHight - this.wrapperHeight; // 列表高度與容器高度差值
const top = this.wrapperDom.scrollTop; // 列表滾動高度
if (diff - top < 50) {
if (diff > 0) {
if (this.isBindScrolled) {
this.isBindScrolled = false;
this.wrapperDom.removeEventListener("scroll", this.addScroll);
}
this.wrapperDom.scrollTo({
top: diff + 10,
left: 0,
behavior: "smooth"
});
this.restNums = 0;
}
} else {
++this.restNums;
if (!this.isBindScrolled) {
this.isBindScrolled = true;
this.wrapperDom.addEventListener("scroll", this.addScroll);
}
}
this.restComment = this.restNums >= 99 ? "99+" : this.restNums;
},
// 滾動到底部
scrollBottom() {
this.restNums = 0; // 清除剩餘訊息
this.restComment = this.restNums;
this.wrapperDom.scrollTo({
top: this.listDom.offsetHeight,
left: 0,
behavior: "smooth"
});
}
}
};
*{
padding: 0;
margin: 0;
}
.comment{
width: 70%;
height: 350px;
position: relative;
margin: 100px 0 0 20px;
}
.comment-wrap{
height: 350px;
overflow-y: scroll;
-webkit-overflow-scrolling:touch;
}
.comment-wrap li{
text-align: left;
line-height: 30px;
padding-left: 10px;
background: rgba(0, 0, 0, 0.3);
margin-top: 5px;
border-radius: 15px;
color: #fff;
}
.rest-nums{
position: absolute;
height: 24px;
line-height: 24px;
color: #f00;
border-radius: 15px;
padding: 0 15px;
bottom: 10px;
background: #fff;
font-size: 14px;
left: 10px;
}
用的的兩個工具函式
/**
* @desc 函式防抖
* @param {需要防抖的函式} func
* @param {延遲時間} wait
*/
export function debounce(func, wait = 500) {
// 快取一個定時器id
let timer = 0;
// 這裡返回的函式是每次使用者實際呼叫的防抖函式
// 如果已經設定過定時器了就清空上一次的定時器
// 開始一個新的定時器,延遲執行使用者傳入的方法
return function (...args) {
if (timer) clearTimeout(timer)
timer = setTimeout(() => {
func.apply(this, args)
}, wait)
}
}
/**
* @desc 是否滾到到容器底部
* @param {滾動容器} ele
* @param {容器高度} wrapHeight
*/
export function isScrollBottom(ele, wrapHeight, threshold = 30) {
const h1 = ele.scrollHeight - ele.scrollTop;
const h2 = wrapHeight + threshold;
const isBottom = h1 <= h2;
return isBottom;
}
總結
到此這篇關實現陪玩平臺原始碼聊天室評論滾動效果的程式碼的文章就介紹到這了
宣告:本文由雲豹科技轉發自coco-young部落格,如有侵權請聯絡作者刪除
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70002045/viewspace-2791075/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過websocket,實現遊戲陪玩系統的聊天室Web遊戲
- 用 Go + Redis 實現陪玩平臺原始碼中的分散式鎖GoRedis原始碼分散式
- 遊戲陪玩平臺原始碼開發,聊天室內的禮物連擊效果的實現遊戲原始碼
- 陪玩平臺原始碼中的排序演算法,插入排序的實現原始碼排序演算法
- 遊戲陪玩平臺原始碼開發,依賴收集和觸發的實現遊戲原始碼
- 陪玩平臺原始碼實現類似手機懸浮按鈕,需要如何做?原始碼
- 遊戲陪玩平臺原始碼,日期格式化的程式碼分析遊戲原始碼
- Spring Boot + Redis 解決陪玩平臺原始碼重複提交問題Spring BootRedis原始碼
- 遊戲陪玩原始碼的移動端適配,應該如何實現?遊戲原始碼
- linux透過shell指令碼實現ssh互動式自動化Linux指令碼
- 要想實現遊戲陪玩app原始碼的效能測試與調優,應該怎麼做?遊戲APP原始碼
- 如何在遊戲陪玩系統原始碼中聊天室內實現一個禮物系統?遊戲原始碼
- 如何實現遊戲陪玩系統原始碼前端效能監控?遊戲原始碼前端
- 如何使用 Redis 實現 陪玩原始碼中“附近的人” 這一功能?Redis原始碼
- 前端陪玩平臺原始碼管理是否得當,可以從哪些方面考證?前端原始碼
- 提升陪玩平臺原始碼的整體效能,MySQL資料庫如何優化?原始碼MySql資料庫優化
- 陪玩系統原始碼實現音訊編碼的相關步驟原始碼音訊
- 如何用分散式鎖解決陪玩平臺原始碼中的併發問題?分散式原始碼
- 陪玩平臺原始碼中的CDN服務不可用時的解決辦法原始碼
- 遊戲陪玩系統原始碼開發,如何實現圖片和動畫的優化?遊戲原始碼動畫優化
- 如何在遊戲陪玩系統原始碼中實現“刮刮樂”效果?遊戲原始碼
- 直播平臺原始碼,迴圈滾動RecyclerView的實現原始碼View
- 如何開發陪玩系統原始碼的列表頁面,相關實現程式碼原始碼
- 如何在遊戲陪玩app原始碼中實現簡訊驗證碼登入?遊戲APP原始碼
- 什麼是遊戲陪玩app原始碼開發的過度設計,如何避免?遊戲APP原始碼
- 陪玩系統原始碼中陣列去重的實現程式碼,簡單卻重要原始碼陣列
- 遊戲陪玩原始碼的登入方式,簡訊驗證碼登入的實現遊戲原始碼
- 陪玩系統原始碼中mysql資料庫備份還原的實現程式碼原始碼MySql資料庫
- 直播平臺原始碼,RecycleView實現item重疊水平滑動原始碼View
- PHP 如何透過 JSON-RPC 呼叫實現以太坊互動PHPJSONRPC
- 透過Baba is you看「玩點敘述」
- 遊戲陪玩系統原始碼中不同排序演算法的實現方式遊戲原始碼排序演算法
- 遊戲陪玩app原始碼開發,常用的倒數計時功能如何實現?遊戲APP原始碼
- 直播平臺原始碼,純JS實現左右滑動輪播圖原始碼JS
- 陪玩小程式原始碼,不容錯過的加密演算法整理清單原始碼加密演算法
- 直播平臺原始碼,FlinkSQL實現行轉列原始碼SQL
- 直播間原始碼,透過Redis實現資料快取原始碼Redis快取
- 陪玩系統原始碼開發,H5頁面中呼叫支付功能的實現原始碼H5