img及父元素(容器)实现类似css3中的background-size:contain / background-size:cover
img及父元素(容器)实现类似css3中的background-size:contain / background-size:cover
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <style> .item{ width:600px; height:500px; float:left; background-color:black; } body:after{ content:""; display:block; clear:both; } </style> </head> <body> <div class="item"><img src="img/720x480.jpg" /></div> <div class="item"><img src="img/snack.jpg" /></div> <script type="text/javascript" src="js/jquery.js"></script> <script> $(function () { /* 定义jQuery插件 imageSize 使用方式 $("容器").imageSize("contain") 或 $("容器").imageSize("cover") */ $.fn.imageSize = function (type) { this.each(function () { var This = $(this), $img = This.find(">img"), box_width = This.width(), box_height = This.height(); getRealImageSize($img.attr("src"), function (w, h) { if (type == "contain") {//跟background-size:contain一样效果 if (box_width / box_height <= w / h) { $img.css({ width: "100%", height: "auto", paddingTop: ((box_height - box_width * h / w) / 2) + "px" }); } else { $img.css({ height: "100%", width: "auto", paddingLeft: ((box_width - box_height * w / h) / 2) + "px" }); } } else if (type == "cover") {//跟background-size:cover一样效果 This.css("overflow", "hidden"); if (box_width / box_height <= w / h) { $img.css({ width: "auto", height: "100%" }); } else { $img.css({ height: "auto", width: "100%" }); } } else {//无效果 This.css("overflow", "hidden"); } }); });
//引用自http://www.zhihu.com/question/28733200 function getRealImageSize(url, callback) { var img = new Image(); img.src = url; // 如果图片被缓存,则直接返回缓存数据 if (img.complete) { callback(img.width, img.height); } else { // 完全加载完毕的事件 img.onload = function () { callback(img.width, img.height); } } } }; /* 开始调用插件 */ $(".item").imageSize("contain"); }); </script> </body> </html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?