ฉันกำลังเขียน Javascript เพื่อปรับขนาดภาพขนาดใหญ่ให้พอดีกับหน้าต่างเบราว์เซอร์ของผู้ใช้ (ฉันไม่ได้ควบคุมขนาดของภาพต้นฉบับ)
ดังนั้นสิ่งนี้จะอยู่ใน HTML:
<img id="photo"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
มีวิธีตรวจสอบว่าsrc
รูปภาพในimg
แท็กถูกดาวน์โหลดหรือไม่
ฉันต้องการสิ่งนี้เพราะฉันพบปัญหาหาก$(document).ready()
ดำเนินการก่อนที่เบราว์เซอร์จะโหลดภาพ $("#photo").width()
และ$("#photo").height()
จะส่งคืนขนาดของตัวยึดตำแหน่ง (ข้อความแสดงแทน) ในกรณีของฉันนี่คือ 134 x 20
ตอนนี้ฉันกำลังตรวจสอบว่าความสูงของรูปถ่ายน้อยกว่า 150 หรือไม่และสมมติว่าถ้าเป็นเช่นนั้นเป็นเพียงข้อความแสดงแทน แต่นี่เป็นการแฮ็กค่อนข้างมากและจะพังหากรูปภาพมีความสูงน้อยกว่า 150 พิกเซล (ไม่น่าจะเป็นในกรณีเฉพาะของฉัน) หรือหากข้อความแสดงแทนมีความสูงมากกว่า 150 พิกเซล (อาจเกิดขึ้นในหน้าต่างเบราว์เซอร์ขนาดเล็ก) .
แก้ไข:สำหรับใครที่ต้องการดูรหัส:
$(function()
{
var REAL_WIDTH = $("#photo").width();
var REAL_HEIGHT = $("#photo").height();
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(REAL_HEIGHT < 150)
{
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
if(REAL_HEIGHT < 150)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
อัปเดต : ขอบคุณสำหรับคำแนะนำ มีความเสี่ยงที่เหตุการณ์จะไม่ถูกเริ่มทำงานหากฉันตั้งค่าการเรียกกลับสำหรับ$("#photo").load
เหตุการณ์ดังนั้นฉันจึงกำหนดเหตุการณ์ onLoad โดยตรงบนแท็กรูปภาพ สำหรับบันทึกนี่คือรหัสที่ฉันลงท้ายด้วย:
<img id="photo"
onload="photoLoaded();"
src="a_really_big_file.jpg"
alt="this is some alt text"
title="this is some title text" />
จากนั้นใน Javascript:
//This must be outside $() because it may get called first
var isPhotoLoaded = false;
function photoLoaded()
{
isPhotoLoaded = true;
}
$(function()
{
//Hides scrollbars, so we can resize properly. Set with JS instead of
// CSS so that page doesn't break with JS disabled.
$("body").css("overflow", "hidden");
var REAL_WIDTH = -1;
var REAL_HEIGHT = -1;
$(window).resize(adjust_photo_size);
adjust_photo_size();
function adjust_photo_size()
{
if(!isPhotoLoaded)
{
//image not loaded.. try again in a quarter-second
setTimeout(adjust_photo_size, 250);
return;
}
else if(REAL_WIDTH < 0)
{
//first time in this function since photo loaded
REAL_WIDTH = $("#photo").width();
REAL_HEIGHT = $("#photo").height();
}
var new_width = . . . ;
var new_height = . . . ;
$("#photo").width(Math.round(new_width));
$("#photo").height(Math.round(new_height));
}
});
max-width
และmax-height
การจัดแต่งรูปแบบภาพด้วย Javascript ผิดพลาดอย่างไร จากนั้นคุณจะหลีกเลี่ยงโค้ดทั้งหมดที่คุณต้องใช้ในการเขียนโดยตั้งค่าความกว้าง / ความสูงสูงสุดเป็นขนาดของความกว้าง / ความสูงของวิวพอร์ต