<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1. 新增樣式繫結
<div class="container" :style="{height: scrollerHeight}"> </div>
2. 新增屬性計算
computed: { // 捲動區高度 scrollerHeight: function() { return (window.innerHeight - 50) + 'px'; //自定義高度需求 } }
今天老大沒安排活幹,也不想划水,於是打算用一個websocket寫一個簡易的聊天系統。
後端程式碼很容易就寫好,但是前端是真的難搞,遇到一個很嚴重的問題:
當傳送一條訊息或者是收到一條訊息,訊息展示介面不能滑到最下面,展示最新訊息,於是,經過一段時間的修改,傳送新訊息時,卷軸雖然能下滑,但是滑不到最底部,於是我新增了一個按鈕,使用按鈕,將卷軸滑到最底部是可行的。又使用debug偵錯,發現:vue會先執行你的其它方法,再渲染頁面,導致總是隻能滑到上一條訊息展示的高度。
於是我再百度,發現:重置資料後,獲取dom元素高時,dom元素還未渲染完畢,(可能這就是為什麼只能滑到上一條訊息展示的地方)
this.$nextTick()
函數 :在下次DOM更新迴圈結束之後執行延遲迴撥this.$nextTick(()=>{ this.goBottom(); // 卷軸滑到底部的方法 })
補充:使用vue獲取一個指定的元素的高度,可以使用vue的ref
當ref加在普通的元素上,使用this.ref.name獲取到的是dom元素
下面是聊天的html程式碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>微聊</title> <script src="../static/js/vue.js"></script> <style> .cheet-box{ width: 592px; height: 160px; } .box{ /*margin: 0 auto;*/ /*overflow:auto;*/ overflow-y: auto; overflow-x: hidden; font-family: "微軟雅黑 Light"; width: 600px; height: 300px; background-color: #ecece9; border: none; box-shadow: aliceblue; margin-bottom: 20px; padding: 50px; } .to,.me{ word-wrap:break-word; display: block; width: 50%; padding: 26px; border-radius: 10px; background-color: #fff; margin: 5px 0 10px 0; } .system-log{ padding: 5px 0; color: darkgrey; text-align: center; } .to{ float: left; } .me{ float: right; } </style> </head> <body onbeforeunload="checkLeave()"> <div id="app"> <div class="box" id="box" ref="getHeight"> <div v-for="item in messageArray"> <!-- <div class="system-log">連線成功...</div>--> <div class="to" v-if="item.username != message.username" v-text="item.text"> </div> <div class="me" v-else v-text="item.text"> aaaaaa </div> </div> </div> <div> <input type="text" v-model="message.username"> </div> <div> <textarea type="text" v-model="message.text" class="cheet-box"></textarea> <input @click="sendMessage()" type="button" value="傳送"/> <input @click="goBottom()" type="button" value="底部"/> </div> </div> <script> function checkLeave(){ sessionStorage.setItem('key','hello'); localStorage.setItem('2','3') } var websocket ; var vm = new Vue({ el:'#app', created(){ this.initWebSocket(); }, data:{ message:{ username:'', text:'', }, messageArray:[ ], }, methods:{ initWebSocket(){ if (typeof (WebSocket)=="undefined"){ alert('瀏覽器不支援WebSocket') }else { console.log('瀏覽器支援websocket') websocket = new WebSocket("ws://localhost:8080/ws/asset"); //連線開啟事件 websocket.onopen = function() { console.log("Socket 已開啟"); var obj = { text:'', username: '', log:'連線成功!' } websocket.send(JSON.stringify(obj)); }; //收到訊息事件 websocket.onmessage = function(msg) { vm.pushArray(msg.data) }; //連線關閉事件 websocket.onclose = function() { console.log("Socket已關閉"); }; //發生了錯誤事件 websocket.onerror = function() { alert("Socket發生了錯誤"); } //視窗關閉時,關閉連線 window.unload=function() { websocket.close(); }; } }, sendMessage(){ websocket.send(JSON.stringify(this.message)); this.message.text = '' }, pushArray(msg){ let message = JSON.parse(msg); console.log(message) if (message.username!='' && message.text!=''){ this.messageArray.push(message) this.$nextTick(()=>{ this.goBottom(); }) } }, goBottom(){ let box = document.getElementById('box'); box.getBoundingClientRect().height box.scrollTo(0,box.scrollHeight-box.clientHeight) } } }) </script> </body> </html>
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45