图片缩放以适应屏幕

5

我创建了这段代码,用于调整照片/图像的大小以适应屏幕,并考虑到导航栏可用的空间。

脚本在图像加载和导航单击时触发。

有人有建议如何改进并确保浏览器兼容性吗?

HTML

$(document).ready(function(){
 $("#photo").load(function(){
  resize();
 });

 $(".navigation img").click(function(){
  var imgPath = $(this).attr("src"); 
  $("#photo").attr({ src: imgPath });
  resize();
  return false;
       });
   });

Javascript

resize = function() {

    var borderVt=150; //value based on css style. bottom bar + padding of photoContain
    var borderHz=40; //value based on css style photoContain padding

    $("#photo").css("width", "auto").css("height", "auto"); // Remove existing CSS
    $("#photo").removeAttr("width").removeAttr("height"); // Remove HTML attributes   

    var origSizeW = $("#photo").width();
    var origSizeH = $("#photo").height();
    var ratioVt=(origSizeW/origSizeH);
    var ratioHz=(origSizeH/origSizeW);
    var winW = $(window).width();
    var winH = $(window).height();
    var screenSizeW=Math.round(winW-borderHz);
    var screenSizeH=Math.round(winH-borderVt);

    if (origSizeW>=origSizeH){

     var newHeight = Math.round(screenSizeW*ratioHz);
     if (newHeight <= screenSizeH){
      $("#photo").css("width", screenSizeW); // Set new width
      $("#photo").css("height", newHeight);
      }
     else{
      $("#photo").css("height", screenSizeH);
      }

    }
    else{
    $("#photo").css("height", screenSizeH); // Set new height
    }
  };
6个回答

11
我知道这个问题已经很老了,但是这里有一个解决方案(尽管我相信原帖的也很好):
这个 jQuery 插件似乎可以完全满足你的需求: http://code.google.com/p/jquery-imagefit-plugin/ 如果你在一个 100% 高度、100% 宽度的元素上执行它: http://www.tutwow.com/htmlcss/quick-tip-css-100-height/
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://jquery-imagefit-plugin.googlecode.com/svn/trunk/jquery.imagefit-0.2.js"></script>
<div style="width: 100%; height: 100%">
    <img  id="h5" src="http://www.w3.org/html/logo/downloads/HTML5_Logo_512.png"/>
</div>
<script>
    jQuery('#h5').bind('load', function() {
        jQuery('div').imagefit();
    });
</script>

(示例:http://jsfiddle.net/nottrobin/9Pbdz/


我已经点赞了,但由于我不是最初创建问题的人,所以我无法接受它。 - Maxim V. Pavlov
只是一个问题,当图像尺寸较小时,这种方法是否会减少发送到客户端的数据量? - João Pimentel Ferreira

5

尝试使用jQuery-Backgrounder插件。你可以调整它来满足你的需求。这是一个例子:

<script src="jquery.backgrounder.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript" charset="utf-8">
  $(function() {
    $('#my_background').backgrounder({element : 'body'});
  });
</script>

[...]

<div id="my_background"><img src="birthday.jpg" alt="Birthday party" /></div>

3
我写了一个插件!
jQuery.fn.positionMe = function () {
    var oH = $(window).height();
    var oW = $(window).width();
    var iH = this.outerHeight();
    var iW = this.outerWidth();

    // When the image is too small so, do nothing
    if(iW>oW && iH>oH){

        // Otherwise, proportionate the image relative 
        // to its container
        if(oH/iH > oW/iW){
            this.css("width", oW);
            this.css("height", iH*(oW/iW))
        } else {
            this.css("height", oH);
            this.css("width", iW*(oH/iH));
        }

    }
    return this;
}

使用方法:

$("#photo").positionMe();

2
这是我的做法:
 jQuery(document).ready(function($) {
      $('.wp-post-image').height($(window).height());
 });

1

看起来不错,但我建议将你的调整大小函数附加到jQuery的窗口调整大小事件处理程序上。然后图片将随着页面的伸缩而拉伸和收缩。


0
var w=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth||document.body.offsetWidth||window.screen.availWidth;
var h=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||document.body.offsetHeight||window.screen.availHeight;

function resize() {

    a=document.getElementsByClassName(' scale');
    for(var i=0; i<a.length; i++){

        var aW = a[i].offsetWidth;
        var aH = a[i].offsetHeight;
        var d=w/h;
        var mT, mL;

        if (d>=1.5){
            aW=w;
            aH=w-(w*(34/100));
            mT=(aH/2)*-1;   
            mL=(aW/2)*-1;   
        } else {
            aH=h;
            aW=h+(h*(66/100));
            mT=(aH/2)*-1;
            mL=(aW/2)*-1;
        }

        a[i].style.height=aH+'px';
        a[i].style.width=aW+'px';
        a[i].style.marginTop=mT+'px';
        a[i].style.marginLeft=mL+'px';  
    }
}

以上代码是纯JavaScript。在所有浏览器中居中适合图像。只需找出您的图像比例,即图像大小1500 x 1000 = 1.5,现在使用此比例进行比较。 - Siddharth Singh
虽然这可能回答了问题,但最好在您的答案中加入一些文本来解释您正在做什么。请阅读如何撰写良好的答案 - Jørgen R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接