Safari,Chrome在页面加载之前在window.load中运行代码
Safari, Chrome runs code in window.load before page loaded
我有一些看起来像这样的html:
<div class="nmMap-wrapper">
<div id="draggable" class="nmMap-image">
<div class="nmMap"></div>
</div>
</div>
在"nmMap"
我在 css 中设置了一个背景图像。
我有一个javascript加载背景图像,将其追加为图像,然后获取宽度和高度,并提醒所有不同的变量。
脚本如下所示:
jQuery(window).load(function($) {
sceneConstructor();
});
function sceneConstructor() {
var bgHeight;
var bgWidth;
var bgAspectRatio;
function init() {
getBgSize();
alertRatio();
}
function getBgSize() {
var bgsrc = jQuery('.nmMap').css('background-image')
.replace('url("', '')
.replace('url(', '')
.replace('")', '')
.replace(')', '')
.replace('"', '')
.replace("'", '');
var bgImg = jQuery('<img />');
//bgImg.hide();
jQuery('.nmMap').append(bgImg);
bgImg.attr('src', bgsrc);
bgImg.bind('load', function() {
var width = jQuery(this).width();
var height = jQuery(this).height();
alert('first height' + height);
setAspectRatio(width, height);
});
}
function setAspectRatio(width, height) {
alert('second height: ' + height);
bgHeight = height;
bgWidth = width;
bgAspectRatio = bgWidth / bgHeight;
alert('trejde: ' + bgHeight);
jQuery('.nmMap').addClass('ration');
}
function alertRatio() {
alert('bgheight ' + bgHeight);
alert('bgwidth ' + bgWidth);
alert('bgheight ' + bgHeight);
alert('bgaspect ' + bgAspectRatio);
}
init();
}
所有这些都在 Firefox 中工作,除了 alertRatio()
中的第一个警报总是未定义。但是在 safari、chrome 和 IE 中,就像首先运行alertRaiom()
一样,因此所有警报都是未定义的。
有人可以帮忙告诉我发生了什么事吗?
尝试使用jquery的默认.ready。
此代码在加载 DOM 后加载。
jQuery( document ).ready(function() {
sceneConstructor();
}):
你也可以
jQuery( window ).ready(function() {
sceneConstructor();
}):
来源: https://api.jquery.com/ready/
如果在
设置图像的src
属性之前bind()
事件侦听器是否有帮助?
相关文章:
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- $(window).load在带有异步js-libs的IE中触发得太快
- google.maps.event.addDomListener(window, 'load', fun
- $(window).load()被调用了无数次
- Turbolinks等效于window.load的事件
- 确定window.load函数的优先级
- 为什么我不能将未定义分配给 window.load
- window.load上单独的javascript文件中的引用函数
- 在Drupal 7中执行$(window).load()和$(window).resize()
- .load()适用于window,而不是ID
- jquery window.load()函数赢得't在ios5上触发
- Javascript 超过 1 个 window.addeventlistener,允许“load”
- 以“$( window ).load(function()”开头的 js 代码
- 是否有类似于“$(window).load();”的东西用于在新插入的 Ajax 内容完成加载后执行函数
- jQuery(window).load(function($) 仍然给出 Uncatch TypeError: $ 不是
- Jquery 事件,如 $(window).load 用于部分视图
- 如何在没有window.location.reload()的情况下使JavaScript .load工作
- 计算数据并在从服务器端获取所有数据后呈现它们;$(window).load() 没有运气
- Lab.js 和 jQuery with $(window).load(function() 过早触发
- document.ready 即使加载了 window.load 也会运行