关于Jquery的$(function(){})的一些顿悟
每次写代码,总要为一些细节上的瑕疵耽搁许久,虽然可以选择性地绕过,但这种发现问题又不想办法去解决的感觉,就像,借用苏东坡的话就是:如蝇在舌,吐之方快!所以每次都被这样的小细节弄得心力交瘁,身心俱惫,一种将要发狂的感觉。
这次遇到的问题是一个用许多图片实现拼积木的那种相互交错补充效果,这需要动态获取图片所在列表的高度跟宽度。功能可以在火狐跟IE中顺利显现,但在谷歌浏览器中总是发生错乱。纠结许久,用各种调试工具也调了好久,终于调到是获取列表的宽度跟高度的出现问题,又进而发现问题的根本所在,就在$(function(){})这上面!

$(function(){ var index=0; var _top=new Array(50,50,50); var _left=new Array(0,246,492); var maxHeight=0; moveItem(); function moveItem(){ $(".site-content li").each(function(){ index=$(".site-content li").index(this)%3; $(this).css({"position":"absolute","left":_left[index]+"px","top":_top[index]+"px"}); _top[index]=$(this).height()+_top[index]; }); $.each(_top,function(key,val){ if(val>maxHeight){ maxHeight=val; } }); $(".site-content").css("height",maxHeight+80+"px"); } })
都知道$(function(){})是$(document).ready(function(){})的简写,他是边加载边运行,并不是所有资源都加载完毕之后才运行,这就是问题所在:因为图片都还没有加载过来,所以就获取不到他们的高度跟宽度,所以就布局错乱了,这时只要改用原始的javascript中的 window.onload 就能正常运行了。修改后的代码如下:
window.onload=function(){ var index=0;
//只需3列,所以写死来 var _top=new Array(50,50,50); var _left=new Array(0,246,492); var maxHeight=0; moveItem(); function moveItem(){ $(".site-content li").each(function(){ index=$(".site-content li").index(this)%3; $(this).css({"position":"absolute","left":_left[index]+"px","top":_top[index]+"px"}); _top[index]=$(this).height()+_top[index]; }); $.each(_top,function(key,val){ if(val>maxHeight){ maxHeight=val; } }); $(".site-content").css("height",maxHeight+80+"px"); } }
至于火狐跟IE都能正常运行,可能是他们解析HTML的方式有些差异,探索后再写,容后修改!
分类:
javascript
标签:
javascript
, jquery
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗