nar*_*esh 16 javascript uiwebview ios cordova phonegap
我正在研究Cordova应用程序.我在哪里连接到实时传感器并从传感器读取一些数据.问题是当我滚动视图时数据被加扰.这适用于Android但不适用于iOS.
这是我的代码片段.
<div id="right_col">
<button onclick="clearReceivedData()">Clear Received Data</button>
<br>
<div id="receivedData"></div>
</div>
function dataReceivedCallback(data) {
document.getElementById("receivedData").innerHTML += data.value1 + ": ";
document.getElementById("receivedData").innerHTML += data.value2 + ":";
document.getElementById("receivedData").innerHTML += data.value3 + "<br>";
}
Run Code Online (Sandbox Code Playgroud)
dataReceivedCallback将从传感器接收的每个数据调用.此回调也会阻塞,直到滚动完成.如何在滚动UI时更新UI.
我并不完全理解你的情况 100% 但我认为你应该这样做:
1-innerHTML尽可能少地访问,每次读取或写入元素属性时都会强制文档重新渲染,下面是更好的方法。
function dataReceivedCallback(data) {
var newHTML = '';
newHTML += data.value1 + ": ";
newHTML += data.value2 + ":";
newHTML += data.value3 + "<br>";
document.getElementById("receivedData").innerHTML += newHTML;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我们只访问了innerHTML一次而不是 3 次
2-您需要给浏览器留出一些空间来处理滚动事件,因此您需要使用异步函数更新ui,同样可以利用超时函数来执行此操作:
var timeoutHandller;
function dataReceivedCallback(data) {
clearTimeout(timeoutHandller);
timeoutHandller = setTimeout(function() {
var newHTML = '';
newHTML += data.value1 + ": ";
newHTML += data.value2 + ":";
newHTML += data.value3 + "<br>";
document.getElementById("receivedData").innerHTML += newHTML;
}, 150);
}
Run Code Online (Sandbox Code Playgroud)
现在,UI 更新只会每 150 毫秒触发一次,这应该为滚动事件的处理留出足够的空间。
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |