js方法在加载时调用,但窗体初次加载时,该方法却没有执行,而在页面刷新时,该方法却执行了

<scripttype="text/javascript">//限制图片大小functionLimitImg(){$(".mo").each(function(){var... <script type="text/javascript">
//限制图片大小
function LimitImg() {
$(".mo").each(function () {
var image = new Image();
image.src = $(this).attr("src");
if (image.height > 700 && image.width <= 454) {
$(bt).css("height", "700");
}
else if (image.width > 454 && image.height <= 700) {
$(this).css("width", "454");
}
else if (image.width > 454 && image.height > 700) {
$(this).css("width", "454");
var iH = 454 * (image.height) / image.width;
if (iH > 700) {
$(bt).css("height", "700");
}
}
});
}

$(function () {
LimitImg();
});

bt为包含着图片的div块
展开
 我来答
马后雷鼓下扬州5058
2013-04-27 · TA获得超过4321个赞
知道小有建树答主
回答量:693
采纳率:33%
帮助的人:808万
展开全部

img 元素只有当 onload (完全加载,可以显示) 的时候你才能获得它的属性 width, height, naturalWidth, naturalHeight。(naturalWidth 和 naturalHeight 是它们真实的尺寸,但 IE 6/7/8 不支持。)


你的 if 不执行是因为当 JavaScript 运行到这一行的时候 img 还没有被加载,得不到 width 和 height 属性值,瞬间就被忽略了。所以你必须等每一个 img 加载才能设置它父层 bt 的尺寸。


窗体加载的事件是 $(window).on("load", function() {/*、、、*/});,但你的情况不需要。


function LimitImg() {
$(".mo").each(function() {
var image = new Image();
// 图像加载完毕
image.onload = function() {
if (this.height > 700 && this.width <= 454) {
$(bt).css("height", "700");
}
else if (this.width > 454 && this.height <= 700) {
$(this).css("width", "454");
}
else if (this.width > 454 && this.height > 700) {
$(this).css("width", "454");
var iH = 454 * (this.height) / this.width;
if (iH > 700) {
$(bt).css("height", "700");
}
}
// 销毁 image 以防内存溢出
image = null;
}
// 注意 image.src 必须写在 image.onload 之后
image.src = $(this).attr("src");
});
}


使用 jQuery 的 load 也可以得到 image 的尺寸,但如果有 CSS 或父层限制,得到的 width 和 height 是不准确的。所以必须使用 new Image()。


$(".mo").each(function() {
$(this).on("load", function() {
alert($(this).width() + " " + $(this).height());
});
});
更多追问追答
追问
第一篇代码:没拿到Image的src,就拿不到他的高宽。No
第二篇代码:$(this).on("load",function(){});试过了,没用。NO
我觉我调用这个方法的位置错了,应该在窗体加载完成后来调用。
还是谢谢你。
追答
第一篇代码:没拿到Image的src,就拿不到他的高宽。No

jQuery 中的 jQuery(document).ready 是 document 加载,而不是 window 加载,所以 image 的 src 在页面出现的瞬间就可以拿到,不需要 image 加载完毕。

第二篇代码:$(this).on("load",function(){});试过了,没用。NO

用 jQuery 的 load 可以是可行的,只是得到的 width 和 height 不准确。

-------------

还是需要你之前的方法 var image =new Image();
只是你需要再加上 image.onload = function() {},所有判断和 .css() 都必须在这个函数里面执行。

-------------

$(window).on("load", function() {/*、、、*/}); 这是窗体加载的代码
但是要等 img,frame 等全部内容加载完毕才会执行 function 里面的代码,这个时候你的图像已经显示,并且可能已经超出 $(bt) 范围,再执行 .css() 会出现页面跳动。
百度网友a19d193
2013-04-27 · TA获得超过3446个赞
知道大有可为答主
回答量:1464
采纳率:100%
帮助的人:1446万
展开全部
你的img标记是否提供了style设置呢?如<img src="" style="width:...;height:..." />
如果没有的话,第一次访问页面时图片还没有加载完成,所以所有的图片符合要求,而不是js没执行,而刷新的时候,因为图片从缓存加载,这个时候函数的作用就体现出来了。
只是因为页面加载完毕并不证明图片加载完毕的原因。
更多追问追答
追问
"   />
这些数据都是动态获取的,这样会影响吗
追答
应该不会,你查看一下源文件看看结果就知道,如果width_string和height_string正常输出的话...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式