为什么元素的宽度在页面加载之后和那一刻之后不同
why the width of elements are different after page load and after that moment?
情况是,我想在页面加载后立即更改元素的大小。问题是元素没有改变,因为函数getSearchBarWidth
返回的结果是负数。奇怪的是,控制台打印两个元素web_logo
和menu
的宽度值不正确;它们的宽度应该很小,但在控制台中,两个元素的宽度都等于父元素,即导航栏。但后来,我在控制台中再次打印出两个元素的宽度,结果是正确的。有人能解释一下吗?
更新:这似乎是因为我没有指定导航栏的宽度。那么,除了指定父元素的宽度以在页面加载后立即获得其子元素的正确宽度之外,还有其他方法吗?
<script src="js/function.js" defer></script>
js 文件的内容
// calculate the width of window and relevant element
function getSearchBarWidth(){
var wWidth = $(window).width();
var offset = 20; // distance between the search bar and each of the two next elements
var offset_1 = 15; // padding of each sides of the navi bar
var searchBarWidth = wWidth - $("#navi_bar > .web_logo").width() - $("#navi_bar > .menu").width() - 2*offset - 2*offset_1;
return searchBarWidth;
}
// change the size of search bar
if($("#navi_bar > .search_bar").length > 0){
console.log("window: "+ $(window).width());
console.log("logo: "+ $("#navi_bar > .web_logo").width());
console.log("menu: "+ $("#navi_bar > .menu").width());
$("#navi_bar > .search_bar").css("width", getWindowWidth());
}
我的问题解决了。只要调用setTimeout,元素的宽度就会正确。
相关文章:
- 在chrome.tabs.onCreated之后加载HTML页面
- 在指令之后加载的角度ng-init函数
- 在Ajax(过滤器)加载之后加载jQuery脚本
- document.ready是在async js之后加载的
- JQuery在F5之后加载
- 如何在完全加载html之后加载jquery代码段
- Angularjs在初始json之后加载
- 在页面加载的所有其他文件之后加载动画 gif
- 如何在 document.ready() 之后加载的 HTML 上使用 jquery
- jqGrid:在表中已有的本地数据之后加载 JSON 数据
- 在 ExtJS 之后加载 jQuery
- 在jQuery getJSON之后加载PaperScript
- Wordpress强制脚本在插件之后加载
- 在第一部分完成ajax之后加载表单的第二部分
- 在其他脚本之前或之后加载html5shivJS有关系吗?(页面加载时间)
- 在包含ajax之后加载js文件
- 在XMLHttpRequest之后加载jQuery选项卡
- 如何仅在特定事件之后加载服务器变量
- Angular.js控制器在视图加载之后加载
- 如何在另一个已加载的iframe之后加载一个iframe