2013-03-11 10 views
7

Image in a container div, with the height issuejQuery परिवर्तन छवि की ऊंचाई पहलू अनुपात रखने

तो मैं गैलरी, जहां ज्यादातर अपनी छवियों वर्तमान में सीएसएस द्वारा 100% नियंत्रित कर रहे हैं की है। हालांकि, न्यूनतम ऊंचाई निर्धारित करने में: 100%; मेरी छवियों पर, मैं कुछ खींचने का कारण बनता हूं। मेरे पास बहुत अधिक समस्याग्रस्त तस्वीरें नहीं हैं, लेकिन यह मेरे नियंत्रण से बाहर है कि उपयोगकर्ता अपलोड करेगा।

क्या jQuery के साथ वैसे भी मैं छवि की ऊंचाई प्राप्त कर सकता हूं और जांच सकता हूं कि यह एक आवश्यकता को पूरा कर रहा है, और यदि नहीं, तो ऊंचाई की आवश्यकता को पूरा करने के लिए छवि चौड़ाई को बढ़ाएं, लेकिन चीजों को अनुपात में रखें? इसलिए मैं किसी विकृति के कारण होने से बचता हूं लेकिन अंतराल के बिना divs को गैलरी को साफ रखता हूं।

नोट: प्रदान की गई छवि तब होती है जब मैं अपना min-height: 100%; हटा देता हूं ताकि आप मेरी समस्या देख सकें।How to resize images proportionally/keeping the aspect ratio?

: -

अपडेट - - - -

मैं एक समाधान पल के लिए ठीक काम करने के लिए लगता है कि मिल गया है, यह सबसे अच्छा करने का प्रयास लेकिन मैं एक और जवाब यह है कि मुझे मदद की पाया नहीं हो सकता है

मैंने कभी भी कोड को इतनी थोड़ी थोड़ी सी tweaked, अब अगर कोई छवि minHeight को पूरा नहीं करती है तो यह छवि को अनुपात में आकार बदल देगी, जब तक कि minHeight तक पहुंच न जाए। परीक्षण में मेरे लिए ठीक काम लगता है।

** अद्यतन अंतिम ********* चारों ओर खेलने के बाद मैंने थंब स्क्रिप्ट से एक छोटा सा स्निपिट लिया, केवल वह हिस्सा जहां यह पूरी तरह से कंटेनर के भीतर छवियों को स्थान देता है।

$(window).load(function() { 

    $('.thumbnail img').each(function() { 
     var maxWidth = 320; // Max width for the image 
     var minHeight = 270; // Max height for the image 
     var ratio = 0; // Used for aspect ratio 
     var width = $(this).width(); // Current image width 
     var height = $(this).height(); // Current image height 

     if(width > maxWidth){ 
      ratio = maxWidth/width; // get ratio for scaling image 
      $(this).css("width", maxWidth); // Set new width 
      $(this).css("height", height * ratio); // Scale height based on ratio 
      height = height * ratio; // Reset height to match scaled image 
      width = width * ratio; // Reset width to match scaled image 
     } 

     // Check if current height is larger than max 
     if(height < minHeight){ 
      ratio = minHeight/height; // get ratio for scaling image 
      $(this).css("height", minHeight); // Set new height 
      $(this).css("width", width * ratio); // Scale width based on ratio 
      width = width * ratio; // Reset width to match scaled image 
     } 

     var $img = $(this), 
     css = { 
      position: 'absolute', 
      marginLeft: '-' + (parseInt($img.css('width'))/2) + 'px', 
      left: '50%', 
      top: '50%', 
      marginTop: '-' + (parseInt($img.css('height'))/2) + 'px' 
     }; 

     $img.css(css); 
    }); 

});

यह मेरे सभी थंबनेल के माध्यम से loops, तदनुसार उन्हें आकार देता है। तो यदि न्यूनतम ऊंचाई पूरी नहीं हुई है, तो छवि को तब तक बढ़ाया जाएगा जब तक कि ऊंचाई मेरे थंबनेल कंटेनर को फिट न करे। फिर निचला भाग छवि को केंद्रित करने के लिए मार्जिन पर कितना कम करना है, यह जानने के लिए, प्रत्येक छवि को पूरी तरह से ले लेंगे, और चौड़ाई और ऊंचाई लें और 2 से विभाजित करें। मैं अभी भी इसे tweaking कर रहा हूँ, लेकिन इस समय मेरे लिए अच्छा काम करने लगता है। मैं उम्मीद करता हूं कि इससे किसी की मदद होगी।

वैकल्पिक रूप से एक ऐसी ही मुद्दा मैं इस पाया साथ

सभी लोग: http://joanpiedra.com/jquery/thumbs/ मैं अपने खुद के लेखन वास्तव में यह करने के लिए शुरू हो गया था, लेकिन im यह कैसे अच्छी तरह से काम पर गौर करने और इसे अनुकूलित रूप में की जरूरत के लिए जा रहा।

+0

[जावास्क्रिप्ट के साथ छवि आकार प्राप्त करें] (http://stackoverflow.com/questions/623172/how-to-get-image-size-height-width-using-javascript) – Eich

+0

आपको इससे कुछ मदद मिल सकती है, http://stackoverflow.com/questions/1682495/jquery-resize-to-aspect-ratio?rq=1 – Hoque

उत्तर

4

मैं एक समाधान पल के लिए ठीक काम करने के लिए लगता है कि मिल गया है, यह सबसे अच्छा प्रयास नहीं हो सकता है लेकिन सकता है मैं एक और जवाब यह है कि मुझे मदद की मिली:How to resize images proportionally/keeping the aspect ratio?

मेरे निष्कर्ष के साथ अपडेट किया सवाल

$(window).load(function() { 
    $('.image-gallery-item-image-link img').each(function() { 
     var maxWidth = 320; // Max width for the image 
     var minHeight = 270; // Max height for the image 
     var ratio = 0; // Used for aspect ratio 
     var width = $(this).width(); // Current image width 
     var height = $(this).height(); // Current image height 

     if(width > maxWidth){ 
      ratio = maxWidth/width; // get ratio for scaling image 
      $(this).css("width", maxWidth); // Set new width 
      $(this).css("height", height * ratio); // Scale height based on ratio 
      height = height * ratio; // Reset height to match scaled image 
      width = width * ratio; // Reset width to match scaled image 
     } 

     // Check if current height is larger than max 
     if(height < minHeight){ 
      ratio = minHeight/height; // get ratio for scaling image 
      $(this).css("height", minHeight); // Set new height 
      $(this).css("width", width * ratio); // Scale width based on ratio 
      width = width * ratio; // Reset width to match scaled image 
     } 

     var $img = $(this), 
     css = { 
      position: 'absolute', 
      marginLeft: '-' + (parseInt($img.css('width'))/2) + 'px', 
      left: '50%', 
      top: '50%', 
      marginTop: '-' + (parseInt($img.css('height'))/2) + 'px' 
     }; 

     $img.css(css); 
    }); 
}); 
3

अच्छी तरह से, यदि पूरी तस्वीर दृश्यमान रखना आवश्यक नहीं है (उदाहरण के लिए गैलरी में थंबनेल), तो आप इसे केवल सीएसएस के साथ पूरा कर सकते हैं। ऐसा लगता है कि आपके पास लैंडस्केप प्रकार की तस्वीरें हैं। एचटीएमएल

<div class="img-container"> 
<img src="path/to/img.png" alt=""> 
</div> 

सीएसएस:

div > img { 
background-repeat: no-repeat; 
background-position: center center; 
background-attachment: fixed; 
-webkit-background-size: cover; 
-moz-background-size: cover; 
-o-background-size: cover; 
background-size: cover; 
width:100%; 
height:100%; 

}

jquery: 
$(document).ready(function(){ 
    $(".imgcontainer > img").each(function(){ 
     var thisimg = "url("+$(this).attr('src')+")"; 
     $(this).css({'background-image': thisimg }); 
     $(this).attr('src', ''); 
    }); 

}); 
+0

समस्या यह है कि मैं इसके साथ देखता हूं कि एक आईएमजी पर पृष्ठभूमि सेट करना काम नहीं करता है, जब तक कि मैं इसे पढ़ नहीं रहा गलत तरीके से। मैं div पर पृष्ठभूमि छवि के रूप में img सेट करना चाहता हूँ, नहीं? – Doidgey

+0

अरे, आदमी। यह काम करना चाहिए। मेरे लिए एक आकर्षण की तरह काम करता है। मैंने जेएस फिडल पर परीक्षण किया, क्योंकि मैंने अपनी शुरुआती पोस्ट के लिए बिल्कुल परीक्षण नहीं किया था। [यहां जेएस फिडल] (http://jsfiddle.net/tpressley1/X728b/3/)। उम्मीद है की यह मदद करेगा!!! – Todd

+0

आह, यह मेरे फ़ायरफ़ॉक्स में प्रतीत होता है, छवि प्रदर्शित नहीं हो रही है। मैंने क्रोम में चेक किया और मैं छवि देख सकता हूं: एस – Doidgey

1

किसका पहलू अनुपात तुम्हारे बारे में बात कर रहे हैं? आपकी गैलरी या छवि के पहलू अनुपात का पहलू अनुपात?आप केवल एक आयाम (यहां ऊंचाई) को बदलकर सही पहलू अनुपात में एक छवि नहीं रख सकते हैं। पहलू अनुपात को रखने के लिए, आपको छवि की ऊंचाई और चौड़ाई दोनों को बदलना होगा। किसी भी तरह से आप इस कोशिश चाहते हैं:

var img = document.getElementById('imageid'); 
var width = img.clientWidth; 
var height = img.clientHeight; 
if(width >height) 
    $(img).attr('style',"width=100%"); 
else 
    $(img).attr('style',"height=100%"); 

मैं क्या करने की कोशिश कर रहा हूँ कि, 100% करने के लिए सबसे बड़ा आयाम की सीएसएस सेट है। यह चाल करेगा।

+0

काम नहीं कर रहा है क्योंकि मुझे इसकी आवश्यकता है – Doidgey

0

तो, मुझे कुछ समय पहले इस सवाल का एहसास हुआ। लेकिन तब से मैंने एक तत्व के पहलू अनुपात को बनाए रखने के लिए एक मीठा सीएसएस पाया है, तरलता से। इसे आजमाएं:

#targetElement { 
    max-width: 100%; 
} 

#targetElement:after { 
    content: ''; 
    width: 100%; 
    padding-bottom: <aspect-ratio>%; // where (height/width)*100 = <aspect-ratio> 
} 

हाँ, इसलिए मैं अब इस चाल हर समय का उपयोग, और यह निश्चित रूप से अधिक performant और जावास्क्रिप्ट का उपयोग कर की तुलना में कम वर्बोज़, या यहाँ तक कम कुशल है JQuery। उम्मीद है कि यह कहीं किसी की मदद करता है! यदि आप एक कम व्यक्ति हैं, तो मेरे पास गिथब पर एक मिश्रित गिस्ट है जो यह करता है - यह कितनी बार मैं इसका उपयोग करता हूं! यह यहां रहता है: Sweet AR trick

संबंधित मुद्दे