所以这个很有意思。我正在使用setTimeout来延迟函数以确定弹出窗口的位置。代码半工作但是在没有位置的情况下放置弹出窗口之前就已经开始了(如果我发出警报,它会起作用,将弹出窗口放在正确的位置。一旦我发出警报,它就不再了把它放在正确的地方)。我已经添加了一个setTimeout来购买一些时间来降低位置(似乎正在工作),但其余的代码会在超时倒计时向前移动。
在下面的示例中,它正在进行添加:
在获得展示位置之前 - 意味着它不会被放置在正确的位置。
以下是代码:
var VideoOption = {
placement: function getPosition(context, source) {
var position = $(source).position();
setTimeout(function() {
//alert(position.left);
if (position.left < 500)
return "right";
if (position.top < 300)
return "bottom,";
return "top,";
}, 1000)
},
trigger: "Manual",
container: "html",
html: true,
content: '<video autoplay>' +
'<source src="' + props.video_path + '" type="video/mp4"></source>' +
'</video>'
};
那么我怎样才能确保触发器,容器,HTML和内容在&#34;放置之前不会进一步发展&#34;人口稠密?我可以在setTimeout中添加吗?我试过但是没有工作。
我使用完全相同的代码(它是由某人编写的,我正在重新利用它)并且它适用于小图像和文本,因此我认为加载视频所需的时间更长setTimeout似乎合乎逻辑?
思想?
答案 0 :(得分:0)
Javascript代码运行完成。意思是setTimeot没有暂停你的代码,只是在你完成其余的代码时说嘿嘿,经过这个毫秒后运行这个函数。
alert
函数是一个例外,它在用户交互之前真正停止了js代码
无论如何要解决你的问题,你必须使用像onLoad
之后的DOM事件,如果你使用jquery,你可以将函数传递给$ $(function(){})
。
您可以在mdn上阅读有关javascript concurency和DOM events的更多信息。希望它有所帮助。