Wait for element to be displayed to user
如何等待用户显示/查看元素?我有以下函数,但它只检查元素是否存在,而不检查它是否对用户可见。
1 2 3 4 5 6 7 8 9 10 11 12 | function waitForElementDisplay (selector, time) { if (document.querySelector(selector) != null) { return true; } else if (timeLimit < timeSince) { return false; } else { timeSince += time; setTimeout(function () { waitForElementDisplay(selector, time, timeLimit, timeSince); }, time); } } |
有点困惑,你在试着简单的"睡眠"吗?
您可以使用以下方法等待元素加载:
1 2 3 | document.querySelector(selector).onload = function() { // Your code ... } |
一些工作片段,运行它:
1 2 3 4 5 6 7 | // Triggering load of some element document.querySelector("body").onload = function() { // Setting the timeout and visible to another element setTimeout(function () { document.querySelector("#my_element").style.display ="block" /* VISIBLE */ }, 1000); } |
号
1 2 3 4 5 6 | #my_element{ width: 100px; height: 100px; background-color: red; display: none; /* INVISIBLE */ } |
1 |
。
如果您希望等待
运行下面的示例,希望它有帮助:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Triggering, in my exemple i've used: WINDOW ONLOAD window.onload = function() { waitForElementDisplay("#my_element", 1000); } function waitForElementDisplay (selector, time) { // Check the DOM Node in console console.log(document.querySelector(selector)); // If it's a valid object if (typeof document.querySelector(selector) !=="undifined") { // Setting the timeout setTimeout(function () { document.querySelector(selector).style.display ="block" /* VISIBLE */ }, time); } } |
1 2 3 4 5 6 | #my_element{ width: 100px; height: 100px; background-color: red; display: none; /* INVISIBLE */ } |
1 |
。
您可以使用jquery.ready()。
1 2 3 | selector.ready(function(){ // do stuff }) |