js获取背景图片宽高比后根据浏览器宽度动态赋值div.style.height

div的width:100%,background-size:100%auto。div宽度这样是根据浏览器窗口宽度自适应,div高度要js赋值。js获取背景图片长宽,计算... div的width:100%,background-size:100% auto。div宽度这样是根据浏览器窗口宽度自适应,div高度要js赋值。js获取背景图片长宽,计算出宽高比。div实时宽度*背景图的长宽比=div高度。 展开
 我来答
花花浪客
2013-04-30 · TA获得超过2069个赞
知道小有建树答主
回答量:792
采纳率:100%
帮助的人:710万
展开全部

代码大致如下供参考:

var   image=new   Image();
image.src=//你的背景图片的src;
var divelement = document.getElementById(你的div的id);
divelement.style.height=(image.height*divelement.offsetWidth)/image.width + "px";

几个需要注意的地方是image.src=xxx后需要等待直到图片下载完成。但是如果这个脚本是在你的div已经初始化好之后调用的话,那么图片已经被下载过了,所以直接进行后面的就好。另外以style.height来设置高度的话后面需要加单位,比如px

追问
读不出图片的宽高啊,方便Q么
追答
图片加载完成后使用是一定能读出宽高的。
我说过image.src=xxx后需要等待直到图片下载完成,可以使用image.onload来实现,参考3楼的做法。也可以settimeout定期检测image的状态看看是否完成。总之要等到图片加载完成后再进行后面的
马后雷鼓下扬州5058
2013-04-29 · TA获得超过4321个赞
知道小有建树答主
回答量:693
采纳率:33%
帮助的人:804万
展开全部

【注意】因为百度知道这几天的高亮显示不正常,下面代码中前面的空格都是【全角】,你复制粘贴之后自己用编辑器查找/替换全部吧。


<style type="text/css">
#div {
  width: 100%;
  background: url("bg.jpg") no-repeat;
  background-size: 100% auto;
  border: 1px solid #f00;
}
</style>


<script type="text/javascript">
function resizeDiv() {
  // 获取 div 元素
  var div = document.getElementById("div");
  // 兼容 style
  var style = div.currentStyle || getComputedStyle(div, false);
  // 从 url("/path/to/image.jpg") 中获取图像地址
  var img_src = style.backgroundImage
    .replace(/^url\(["']?/, '').replace(/["']?\)$/, '');
 
  // 创建新图像
  var img = new Image();
  // 图像加载
  img.onload = function() {
    // 获取宽高比
    var ratio = img.width / img.height;
    // 根据比例设置 div 高度
    div.style.height = parseInt(div.offsetWidth / ratio) + "px";
    img = null;
  };
  img.src = img_src;
};
 
// 页面加载,设置 div 高度
window.onload = function() {
  resizeDiv();
};
 
// 窗口变化,设置 div 高度
window.onresize = function() {
  resizeDiv();
};
</script>


<div id="div"></div>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lvyingtang
2013-04-30 · TA获得超过645个赞
知道小有建树答主
回答量:675
采纳率:100%
帮助的人:706万
展开全部
用image的onload来触发嘛:
image.onload=function(){
div.style.height=(this.height*div.offsetWidth)/this.width + "px";
}
这个bd的智能检测还真是垃圾货,竟然说我上面的内容没有意义,额……
这个bd的智能检测还真是垃圾货,竟然说我上面的内容没有意义,额……
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a786566316
2013-04-30 · TA获得超过176个赞
知道答主
回答量:565
采纳率:0%
帮助的人:159万
展开全部
new Image(); 我粗略一看代码不错。
但仔细一看
这是html5增加的image对象
在ie9以上浏览器或其他浏览器可以使用
offsetWidth支持也不同
最重要的是少了加载完成事件onload 图片没加载完怎么用
后面不加px也是可以的事实证明一切 但最好加上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式