Javascript防止圖片拉伸的自適應(yīng)處理方法
前言
相信大家在日常的web開(kāi)發(fā)中,作為前端經(jīng)常會(huì)遇到處理圖片拉伸問(wèn)題的情況。
例如banner、圖文列表、頭像等所有和用戶或客戶自主操作圖片上傳的地方,而一旦牽扯圖片,就會(huì)涉及到圖片拉伸的問(wèn)題,當(dāng)然,在圖片上傳時(shí)做手動(dòng)裁切,讓用戶或客戶清晰的感知到圖片的有效內(nèi)容才是最優(yōu)的解決方案,但是在其他各種外在因素下,沒(méi)有做裁切的話,就需要在前端顯示上做處理了,滿足在上傳任意大小圖片的情況下,最優(yōu)顯示效果的需求。
這時(shí)我們需要考慮到極端效果,如下圖:

而我們想要得到的效果是這樣的------

把圖片放進(jìn)框框,要幾步?三步...我們開(kāi)始
第一步:先畫個(gè)框框 (這里順便安利一種自適應(yīng)框框的方法)
// 假定需要一個(gè)在750px屏幕下寬400px,高280px的盒子
// 寬度 = 400 / 750 = 0.5333
// 高度 = 280 / 400 * 0.5333 = 0.3733
<style>
.img-box{
position: relative;
width: 53.33%;
height: 0;
padding-bottom: 37.33%;
overflow: hidden;
background-color: #eee;
}
</style>
<body>
<div id="list">
<div class="img-box">
<img src="..."/>
</div>
</div>
</body>
第二步:設(shè)置圖片需要使用到的css
<style>
.width{
position: absolute !important;
width: 100% !important;
min-height: 100% !important;
top: 50% !important;
transform: translateY(-50%) !important;
-ms-transform: translateY(-50%) !important;
-moz-transform: translateY(-50%) !important;
-webkit-transform: translateY(-50%) !important;
-o-transform: translateY(-50%) !important;
display: block;
}
.height{
position: absolute !important;
height: 100% !important;
min-width: 100% !important;
left: 50% !important;
transform: translateX(-50%) !important;
-ms-transform: translateX(-50%) !important;
-moz-transform: translateX(-50%) !important;
-webkit-transform: translateX(-50%) !important;
-o-transform: translateX(-50%) !important;
display: block;
}
</style>
第三步:js獲取圖片高度比較并給img添加類名
//需要注意的是,不能在css中直接給img設(shè)置寬度和高度
//否則在img.onload后獲取的寬高是css設(shè)置的寬高
//同時(shí)建議使用dom對(duì)象來(lái)獲取img標(biāo)簽
<script>
var list = document.getElementById('list');
getImgWH ( list );
//執(zhí)行寬高比對(duì)并設(shè)置img類名
function getImgWH ( Obj ) {
var img = Obj.getElementsByTagName('img');
for( var i=0 ; i<img.length ; i++ ){
img[i].onload = function(){
var width = this.width;
var height = this.height;
if ( width > height ) {
this.classList.add('height');
} else if ( width < height ) {
this.classList.add('width');
} else {
this.style.width = '100%';
this.style.height = '100%';
}
}
}
}
</script>
圖片防止拉伸處理比較簡(jiǎn)單,但是在實(shí)際項(xiàng)目中需要得到足夠的重視,一個(gè)web頁(yè)面成也圖片,敗也圖片,拉伸了圖片就等著設(shè)計(jì)師的磨嘰吧,哈哈哈哈...
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- 使用JavaScript解決網(wǎng)頁(yè)圖片拉伸問(wèn)題(推薦)
- JS獲取圖片實(shí)際寬高及根據(jù)圖片大小進(jìn)行自適應(yīng)
- JS+css 圖片自動(dòng)縮放自適應(yīng)大小
- 關(guān)于圖片按比例自適應(yīng)縮放的js代碼
- 純js實(shí)現(xiàn)div內(nèi)圖片自適應(yīng)大小(已測(cè)試,兼容火狐)
- JS網(wǎng)頁(yè)圖片按比例自適應(yīng)縮放實(shí)現(xiàn)方法
- 移動(dòng)Web中圖片自適應(yīng)的兩種JavaScript解決方法
- Dropify.js圖片寬高自適應(yīng)的方法
相關(guān)文章
在Ajax中使用Flash實(shí)現(xiàn)跨域數(shù)據(jù)讀取的實(shí)現(xiàn)方法
今天,小子再提供一種使用Flash進(jìn)行跨域操作的方法。眾所周之,其實(shí)Flash的跨域操作也是有限制的,不過(guò),F(xiàn)lash的跨域配置比簡(jiǎn)單,只需要在站點(diǎn)根目錄下放置crossdomain.xml即可。2010-12-12
純js實(shí)現(xiàn)無(wú)限空間大小的本地存儲(chǔ)
這篇文章主要介紹了純js實(shí)現(xiàn)無(wú)限空間大小的本地存儲(chǔ)的功能,源碼和demo都放給大家,本文著重說(shuō)下實(shí)現(xiàn)的原理,具體的實(shí)踐擴(kuò)展小伙伴們自由發(fā)揮吧。2015-06-06
微信小程序?qū)崿F(xiàn)購(gòu)物車代碼實(shí)例詳解
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)購(gòu)物車代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
使用JavaScript開(kāi)發(fā)跨平臺(tái)的桌面應(yīng)用詳解
下面小編就為大家?guī)?lái)一篇使用JavaScript開(kāi)發(fā)跨平臺(tái)的桌面應(yīng)用詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
JavaScript實(shí)現(xiàn)好看的跟隨彩色氣泡效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)好看的跟隨彩色氣泡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02

