我正在使用Phonegap
进行应用程序,并且我正在使用自建幻灯片转换来更改页面。
它的工作原理如下:
每个页面都是div
,其高度和宽度均为100%,因此,如果我更改了页面,我会将下一个div
权限设置为当前有效,并向左侧滑动。
现在问题:滑动工作正常,但是在完全加载右div
的内容之前执行。因此,右div
幻灯片为空,只有在几百毫秒之后内容才会出现。
我尝试使用document.ready
,但正如我所读到的,此事件仅在第一次加载DOM
时执行。
在我使用DOM
操纵DOM
之后,是否有人知道如何等待Javascript
再次完全呈现?
答案 0 :(得分:1)
有一个DOMNodeInserted事件应该像document.ready一样工作,但是对于单个DOM节点。但它被弃用并且有很多问题。 StackOverflow用户找到了一个很好的替代方案,在所有移动浏览器中运行良好:Alternative to DOMNodeInserted
答案 1 :(得分:1)
这是一个函数,一旦匹配jquery选择器的所有图像都加载
,它就会触发回调//css
input {width: 420px;}
//html
<div id="container"></div>
<input type="text" value="http://goo.gl/31Vs" id="img1">
<br><input type="text" value="http://wall.alafoto.com/wp-content/uploads/2010/11/Fractal-Art-Wallpapers-09.jpg" id="img2">
<br><input type="text" value="http://pepinemom.p.e.pic.centerblog.net/ssg8hv4s.jpg" id="img3">
<br><input type="button" value="Load images" name="loadImages" id="btn">
<div id="message"></div>
//javascript
//Call a function after matching images have finished loading
function imagesLoadedEvent(selector, callback) {
var This = this;
this.images = $(selector);
this.nrImagesToLoad = this.images.length;
this.nrImagesLoaded = 0;
//check if images have already been cached and loaded
$.each(this.images, function (key, img) {
if (img.complete) {
This.nrImagesLoaded++;
}
if (This.nrImagesToLoad == This.nrImagesLoaded) {
callback(This.images);
}
});
this.images.load(function (evt) {
This.nrImagesLoaded++;
if (This.nrImagesToLoad == This.nrImagesLoaded) {
callback(This.images);
}
});
}
$("#btn").click(function () {
var c = $("#container"), evt;
c.empty();
c.append("<img src='" + $("#img1").val() + "' width=94>");
c.append("<img src='" + $("#img2").val() + "' width=94>");
c.append("<img src='" + $("#img3").val() + "' width=94>");
evt = new imagesLoadedEvent("img", allImagesLoaded);
});
function allImagesLoaded(imgs) {
//this is called when all images are loaded
$("#message").text("All images loaded");
setTimeout(function() {$("#message").text("");}, 2000);
}
答案 2 :(得分:0)
您可以使用jQuery ajax加载内容,并在成功时使用幻灯片运行一个函数。
$("#page1").load('page2.html', function() {
//do your custom animation here
});
Althoug我不完全确定你是如何加载内容的。它是静态的(已经存在但只是不可见?)或者它是否加载了ajax?
编辑:你可以用几毫秒做一个小的.delay()或setTimeout,然后为滑动设置动画。
答案 3 :(得分:0)
我有一个类似的问题,使砌体网站响应。我使用window.onload
等待所有元素在初始化masonry.js之前完成加载。我还将window.onload
置于.onchange
函数内,并且每次调整视口大小时都会触发它。
我确信应用类似的原则可以解决您的问题。
答案 4 :(得分:0)
尝试一次
$(window).bind('load',function(){
//code
});
答案 5 :(得分:0)
也许你可以在div上设置一个事件。
myDiv.onafterupdate = myHandler;
function myHandler() {
// Do here what you want to do with the updated Div.
}
这对你有帮助吗?
答案 6 :(得分:0)
在jquery中,您可以在DOM操作代码之后使用$()。
$(function(){
//code that needs to be executed when DOM is ready, after manipulation
});
$()调用一个函数,该函数注册一个DOM就绪的回调(如果将函数传递给它)或从DOM返回元素(如果将选择器字符串或元素传递给它)
您可以在此处找到更多内容
difference between $ and $() in jQuery
http://api.jquery.com/ready/