如何在负载上获得元素宽度
How to get element width on load?
我用JavaScript写了一个滑块控件,对它有一些顾虑。脚本在window.onload
上初始化,并将所有具有类slider的元素转换为滑块。
例如:
<div id="hueSlider" class="slider" min="0" max="360" value="240"></div>
问题是当document.load
事件被触发元素还没有渲染,所以我不能计算滑块手柄位置没有滑块的宽度。我做了一个解决方案,为每个滑动条创建一个计时器,检查滑动条是否有非零宽度,然后设置手柄位置并删除自己。
但这是一个非常丑陋的解决方案。你知道如何正确地做这件事吗?
function checkLoad()
{
if (window.onLoad)
{
// you can call your statements in here
} else {
setTimeout('checkLoad();', 1000)
}
}
另一个你可以尝试的方法是:
if (window.addEventListener){
window.addEventListener('load', ready, false)
} else if (window.attachEvent) {
window.attachEvent('onload', ready)
}
编辑:如果以上两种方法都不起作用,请尝试下面的方法,它应该是傻瓜证明,如果它不起作用。您的代码中可能有其他错误:
function makeDoubleDelegate(function1, function2) {
return function() {
if (function1)
function1();
if (function2)
function2(); //call your get slider width statements in here.
}
}
window.onload = makeDoubleDelegate(window.onload, myNewFunction );
这背后的逻辑是,makeDoubleDelegate()函数将放在第一个JS文件中,随时准备调用。它所做的是接受两个函数作为参数,检查它们是否存在,如果存在,返回一个包含有效的、存在的函数的匿名函数。
第一次看到窗口。Onload被称为window。onload本身是未定义的,所以返回的是一个内部只有myNewFunction()的匿名函数。在随后的窗口。Onload赋值,窗口。Onload确实存在,所以它所保存的东西都将被新函数包装起来。
你可以这样做:
window.onload = function(){
// Access elements in here
};
或者这样:
if(document.addEventListener) {
document.addEventListener("DOMContentLoaded", function(){
// Access elements in here for modern browsers
}, false);
} else {
document.attachEvent("onreadystatechange", function(){
if(document.readyState === "complete") {
// Access elements in here for older browsers
}
});
}
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 捕获指定元素的负载
- 如何将带有各种元素的JSON数组传递到http负载
- 如何在负载上获得元素宽度