網頁圖片等比例縮小實現方案總結以及最佳實踐


開發遇到的問題

我們平時開發,后台通過在線編輯器,編輯帖子,上傳圖片,比如ckeditor配置上傳圖片,是可以設置圖片大小的;

這種設置對pc端的話 也許你設置個 800,600,還是可以的。

但是有沒有考慮過移動端呢?

我們發現移動端的圖片有一部分看不到的。

解決方案概述

對於圖片的縮放,有兩種解決方案;

一,設置img DOM的max-width為100%;

二,通過Js計算,來動態設置圖片的寬度和高度;

這要分兩種情況,來具體采用哪種方案;

情況一:圖片寬度占據整個網頁寬度解決方案

對於情況一,比如移動端,圖片是占據整個網頁寬度的,這種比較好解決;

我們加img css樣式即可;

img{width:100%; max-width:100%;}

注意點:

使用這種方式,編輯器添加的圖片不能設置height,否則高度不能等比例的縮小,圖片會變形;

如下圖:

上面沒有設置 高度,下面的設置了高度;

用了max-width,雖然寬度都正常縮放了,但是高度的話,下面那個設置了height屬性的,就變成了,沒有和寬度一起等比例縮放;

情況二:圖片寬度未占據整個網頁寬度解決方案

對於大多數pc端,我們一般都是左右兩塊或者三塊,所有圖片的話,一般是不占據整個網頁寬度的;如下圖:

這里我們分成左右兩塊,我們如果上傳了一個大圖,不做等比例縮小處理的話,就會超過我們設置的左邊區域的寬度,這樣用戶體驗比較差;

這種情況我們不能用max-width,只能用js進行計算,動態修改img的寬度和高度;

如何來進行計算呢?

我們這里考慮兩種情況,如下圖:

一種是 沒設置寬度高度,就純img,還有一個是設置了寬度高度,有一個 style內聯樣式;

所以我們設計通用js方法的時候,需要傳入三個參數,maxwidth,maxheight,還有一個是某個DOM里面的img;

我們規定好最大的寬度,最大的高度,和指定范圍內的圖片;

接下下方法具體實現,我們通過 getElementsByTagName('img') 可以指定DOM里的所有圖片,然后遍歷所有圖片,

對每個圖片的高度和寬度進行判斷,是否超過設置的最高高度和寬度,假如超過了,我們就要通過等比例計算,把縮小后的寬度對應的高度進行計算,以及對縮小后的高度對應的寬度進行計算;

當然最終設置圖片的height和widht的時候,我們記得也要重新設置下style內聯樣式;

完整實現代碼:

function ResizeImages(maxwidth,maxheight,targetDom)
{
   var myimg,oldwidth,oldheight;

   var imgs = document.getElementById(targetDom).getElementsByTagName('img');   //如果你定義的id不是article,請修改此處


   for(i=0;i<imgs.length;i++){
     myimg = imgs[i];


     if(myimg.width > myimg.height)
     {
         if(myimg.width > maxwidth)
         {
            oldwidth = myimg.width;
            myimg.height = myimg.height * (maxwidth/oldwidth);
            myimg.width = maxwidth;
            myimg.style.cssText="height:"+myimg.height * (maxwidth/oldwidth)+"px;width:"+maxwidth+"px";
         }
     }else{
         if(myimg.height > maxheight)
         {
            oldheight = myimg.height;
            myimg.width = myimg.width * (maxheight/oldheight);
            myimg.height = maxheight;
            myimg.style.cssText="height:"+maxheight+"px;width:"+myimg.width * (maxheight/oldheight)+"px";
         }
     }
   }
}

調用的話 body onload里即可;

<body onload="ResizeImages(800,1000,'content')">

這樣就頁面顯示圖片就協調多了;

最佳實踐

在線編輯器,不設置widht和height;

pc端通過js計算,動態設置;

wap端設置max-width即可;

最佳實踐,完美解決;

 

------------------------------------------------------------------------------------------------------------------------------

作者: java1234_小鋒

出處:https://www.cnblogs.com/java688/p/13200262.html

版權:本站使用「CC BY 4.0」創作共享協議,轉載請在文章明顯位置注明作者及出處。

------------------------------------------------------------------------------------------------------------------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM