我正在为网站使用 jQuery 1.8.2 和 jQuery mobile 1.3.2。在一页上,我需要等待整个页面加载后才能应用一些 javascript。我成功地使用了pageinit
这样的事件:
$(document).on('pageinit', '#filmes' ,function(){
console.log('pageinit filmes');
});
但这domready()
比事件更接近事件window.load
。因此,在jQuerymobile api之后,我想使用该pageload
事件,如下所示:
$(document).on('pageload', '#filmes', function(){
console.log('pageload filmes');
});
但这根本不会触发。#filmes是我希望应用 js 代码的页面的 ID 。pageshow
活动正常:
$(document).on('pageshow', '#filmes', function(){
console.log('pageshow filmes');
});
但是我仍然有一些javascript问题,在我看来是因为当js启动时页面还没有完成加载。javascript操作有点繁重,我正在为页面上的每个图像创建一个画布,复制图像并应用乘法运算。
这是代码(基于Alberto Gasparin 的文章):
$(document).on('pageshow', '#filmes', function(){
console.log('pageshow filmes');
//multiply effect
var els = document.getElementsByClassName("multiply");
Array.prototype.forEach.call(els, function(el) {
console.log(el); //test
canvas = document.createElement('canvas');
canvas.width = el.width*2;
canvas.height = el.height*2;
el.parentNode.insertBefore(canvas, el);
ctx = canvas.getContext('2d');
ctx.drawImage(el, 0, 0);
imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
pix = imgData.data;
multiplyColor = [255, 0, 0];
function multiply(topValue, bottomValue){
return topValue * bottomValue / 255;
}
for (var i = 0, n = pix.length; i < n; i += 4) {
pix[i ] = multiply(multiplyColor[0], pix[i ]); // red
pix[i+1] = multiply(multiplyColor[1], pix[i+1]); // green
pix[i+2] = multiply(multiplyColor[2], pix[i+2]); // blue
// pix[i+3] is alpha channel (ignored)
}
ctx.putImageData(imgData, 0, 0);
});
});
这是所有这些的演示。向下滚动,然后点击顶部菜单上的“电影”链接。该页面的直接链接在这里。如果您打开控制台,您可以看到我用于测试这些事件的消息。我通常会在第一次加载时遇到这些错误,然后在刷新后有时看起来还可以。真的很随意。我猜这些操作需要相当多的 cpu 和浏览器工作。
因此,经过多次测试和研究,我想知道我是否在 jqm 或 javascript 操作上做错了,或者我只是在做一些太重的事情,浏览器无法呈现。