javascript 動(dòng)態(tài)調(diào)整圖片尺寸實(shí)現(xiàn)代碼
更新時(shí)間:2009年12月28日 15:27:26 作者:
在自己的網(wǎng)站上更新文章時(shí)一個(gè)比較常見(jiàn)的問(wèn)題是:文章插圖太寬,使整個(gè)網(wǎng)頁(yè)都變形了。如果對(duì)每個(gè)插圖都先進(jìn)行縮放再插入的話,太麻煩了。
我前段時(shí)間寫的一篇文章就遇到過(guò)這種事情,后來(lái)用CSS的overflow和max-width屬性暫時(shí)解決了頁(yè)面變形的問(wèn)題。這種方法好處是簡(jiǎn)單,但壞處是會(huì)破壞某些細(xì)節(jié)的效果。
如overflow:hidden,意思是當(dāng)內(nèi)部元素寬度大于父框架時(shí)隱藏超出寬度的部分。這樣做可能會(huì)是一些內(nèi)容突然截?cái)啵浑[藏了,很對(duì)不起觀眾。
通過(guò)max-width屬性限制文章插圖最大寬度的話,需要考慮各瀏覽器的兼容性。IE6是不支持這個(gè)屬性的,在我印象中,一些瀏覽器雖然支持這個(gè)屬性,但圖片不是等比縮放的(好像是Safari和Opera,記不清了),這樣做的話對(duì)這些瀏覽器的用戶很不公平。
因此,我最終選擇的是通過(guò)JavaScript動(dòng)態(tài)改變圖片尺寸。這種方法對(duì)各種瀏覽器兼容性良好(現(xiàn)在應(yīng)該很少人會(huì)禁用JavaScript吧?),如果換主題的話,也可以靈活地改變文章插圖的最大尺寸。
方案有兩個(gè),由于我使用的主題是加載了jQuery庫(kù)的,因此可以用以下代碼實(shí)現(xiàn):
$(document).ready(function() {
$('.post img').each(function() {
var maxWidth = 100; // 圖片最大寬度
var maxHeight = 100; // 圖片最大高度
var ratio = 0; // 縮放比例
var width = $(this).width(); // 圖片實(shí)際寬度
var height = $(this).height(); // 圖片實(shí)際高度
// 檢查圖片是否超寬
if(width > maxWidth){
ratio = maxWidth / width; // 計(jì)算縮放比例
$(this).css("width", maxWidth); // 設(shè)定實(shí)際顯示寬度
height = height * ratio; // 計(jì)算等比例縮放后的高度
$(this).css("height", height * ratio); // 設(shè)定等比例縮放后的高度
}
// 檢查圖片是否超高
if(height > maxHeight){
ratio = maxHeight / height; // 計(jì)算縮放比例
$(this).css("height", maxHeight); // 設(shè)定實(shí)際顯示高度
width = width * ratio; // 計(jì)算等比例縮放后的高度
$(this).css("width", width * ratio); // 設(shè)定等比例縮放后的高度
}
});
});
如果不想加載jQuery庫(kù),可以用以下代碼:
function ResizeImage(image, 插圖最大寬度, 插圖最大高度)
{
if (image.className == "Thumbnail")
{
w = image.width;
h = image.height;
if( w == 0 || h == 0 )
{
image.width = maxwidth;
image.height = maxheight;
}
else if (w > h)
{
if (w > maxwidth) image.width = maxwidth;
}
else
{
if (h > maxheight) image.height = maxheight;
}
image.className = "ScaledThumbnail";
}
}
采用純JavaScript的話,麻煩點(diǎn),需要手動(dòng)為圖片加上class=”Thumbnail”,但最終效果是一樣的。
如overflow:hidden,意思是當(dāng)內(nèi)部元素寬度大于父框架時(shí)隱藏超出寬度的部分。這樣做可能會(huì)是一些內(nèi)容突然截?cái)啵浑[藏了,很對(duì)不起觀眾。
通過(guò)max-width屬性限制文章插圖最大寬度的話,需要考慮各瀏覽器的兼容性。IE6是不支持這個(gè)屬性的,在我印象中,一些瀏覽器雖然支持這個(gè)屬性,但圖片不是等比縮放的(好像是Safari和Opera,記不清了),這樣做的話對(duì)這些瀏覽器的用戶很不公平。
因此,我最終選擇的是通過(guò)JavaScript動(dòng)態(tài)改變圖片尺寸。這種方法對(duì)各種瀏覽器兼容性良好(現(xiàn)在應(yīng)該很少人會(huì)禁用JavaScript吧?),如果換主題的話,也可以靈活地改變文章插圖的最大尺寸。
方案有兩個(gè),由于我使用的主題是加載了jQuery庫(kù)的,因此可以用以下代碼實(shí)現(xiàn):
復(fù)制代碼 代碼如下:
$(document).ready(function() {
$('.post img').each(function() {
var maxWidth = 100; // 圖片最大寬度
var maxHeight = 100; // 圖片最大高度
var ratio = 0; // 縮放比例
var width = $(this).width(); // 圖片實(shí)際寬度
var height = $(this).height(); // 圖片實(shí)際高度
// 檢查圖片是否超寬
if(width > maxWidth){
ratio = maxWidth / width; // 計(jì)算縮放比例
$(this).css("width", maxWidth); // 設(shè)定實(shí)際顯示寬度
height = height * ratio; // 計(jì)算等比例縮放后的高度
$(this).css("height", height * ratio); // 設(shè)定等比例縮放后的高度
}
// 檢查圖片是否超高
if(height > maxHeight){
ratio = maxHeight / height; // 計(jì)算縮放比例
$(this).css("height", maxHeight); // 設(shè)定實(shí)際顯示高度
width = width * ratio; // 計(jì)算等比例縮放后的高度
$(this).css("width", width * ratio); // 設(shè)定等比例縮放后的高度
}
});
});
如果不想加載jQuery庫(kù),可以用以下代碼:
復(fù)制代碼 代碼如下:
function ResizeImage(image, 插圖最大寬度, 插圖最大高度)
{
if (image.className == "Thumbnail")
{
w = image.width;
h = image.height;
if( w == 0 || h == 0 )
{
image.width = maxwidth;
image.height = maxheight;
}
else if (w > h)
{
if (w > maxwidth) image.width = maxwidth;
}
else
{
if (h > maxheight) image.height = maxheight;
}
image.className = "ScaledThumbnail";
}
}
采用純JavaScript的話,麻煩點(diǎn),需要手動(dòng)為圖片加上class=”Thumbnail”,但最終效果是一樣的。
您可能感興趣的文章:
- JS動(dòng)態(tài)修改圖片的URL(src)的方法
- js動(dòng)態(tài)切換圖片的方法
- js浮動(dòng)圖片的動(dòng)態(tài)效果
- JavaScript 動(dòng)態(tài)改變圖片大小
- JS實(shí)現(xiàn)動(dòng)態(tài)給圖片添加邊框的方法
- JS中通過(guò)url動(dòng)態(tài)獲取圖片大小的方法小結(jié)(兩種方法)
- JavaScript動(dòng)態(tài)生成二維碼圖片
- js動(dòng)態(tài)往表格的td中添加圖片并注冊(cè)事件
- javascript實(shí)現(xiàn)瀑布流動(dòng)態(tài)加載圖片原理
- js、jquery圖片動(dòng)畫、動(dòng)態(tài)切換示例代碼
- JS動(dòng)態(tài)圖片的實(shí)現(xiàn)方法完整示例
相關(guān)文章
js實(shí)現(xiàn)圖片加載時(shí)候逐漸出現(xiàn)的雜色效果
有一些網(wǎng)站在加載圖片的時(shí)候不是一下子就出來(lái)了,而是由模糊到清淅,或是由一種不占用過(guò)多網(wǎng)絡(luò)資源的方式先大致顯示,然后再慢慢加載,避免因用戶等不及將網(wǎng)頁(yè)關(guān)掉,像馬賽克效果、沙子效果等2010-08-08圖片展示效果 鼠標(biāo)經(jīng)過(guò)變大圖,支持FF
圖片展示效果,鼠標(biāo)經(jīng)過(guò)變大圖,支持FF 類似FLASH一樣漂亮2009-08-08