Размер изображения по размеру экрана - PullRequest
5 голосов
/ 03 апреля 2010

Я создал этот код для изменения размера фотографий / изображений по размеру экрана, учитывая пространство, доступное для навигационной панели.

Сценарий запускается при загрузке изображения и при нажатии кнопки навигации.

У кого-нибудь есть предложения по улучшению и обеспечению совместимости браузера?

HTML

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

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

1010 * 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 голосов
/ 23 августа 2011

Я знаю, что этот вопрос устарел, но вот решение (хотя я уверен, что ОП тоже хорошо работает):

Этот плагин 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/)

5 голосов
/ 22 декабря 2010

Попробуйте использовать плагин 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 голосов
/ 16 июля 2012

Я написал плагин!

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 голосов
/ 02 января 2015

Вот как я это делаю:

 jQuery(document).ready(function($) {
      $('.wp-post-image').height($(window).height());
 });
1 голос
/ 03 апреля 2010

Выглядит хорошо для меня, но я бы посоветовал присоединить вашу функцию изменения размера к обработчику событий окна Resize jQuery. Затем изображение будет растягиваться и сжиматься вместе со страницей.

0 голосов
/ 08 апреля 2015
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';  
    }
}
...