Javascript 获取图像的本机分辨率失败
我目前正在尝试实现一个用于比较两个图像的放大镜。显然,我需要知道图像的本机分辨率,但创建新的Javascript 获取图像的本机分辨率失败,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我目前正在尝试实现一个用于比较两个图像的放大镜。显然,我需要知道图像的本机分辨率,但创建新的图像对象、设置src然后查询宽度和高度属性的常用方法失败。它总是返回0 我还尝试了nativeWidth和nativeHeight 我准备了一份JSFIDLE: 这里是我在JSFIDLE中使用的源代码,相关部分在之后立即开始 this.setPosition=函数(x,y){ HTML: 。。。 ... 带JQuery的JavaScript: var Magnifier = function(elem)
图像
对象、设置src
然后查询宽度
和高度
属性的常用方法失败。它总是返回0
我还尝试了nativeWidth
和nativeHeight
我准备了一份JSFIDLE:
这里是我在JSFIDLE中使用的源代码,相关部分在之后立即开始
this.setPosition=函数(x,y){
HTML:
。。。
...
带JQuery的JavaScript:
var Magnifier = function(elem) {
var self = this;
var imageUrl = "http://placehold.it/400x600";
// Configure Parent Member Fields
//----------------------------------------------
// Setup the layout
elem.magnifierContainer = $("<div>").css({
"position" : "relative",
"cursor" : "none"
});
elem.magnifier = $("<div>").css({
"position" : "absolute",
"height" : "11em",
"width" : "11em",
"border-radius" : "50%",
"box-shadow" : "3px 3px 5px #111",
"background" : 'url(' + imageUrl + ') no-repeat',
"display" : "none"
});
elem.smallImage = $("<img>").attr({
"src" : imageUrl
}).css({
"width" : "100%",
"height" : "100%",
"max-width" : "400px",
"max-height" : "600px",
});
$(elem.magnifierContainer).append(elem.smallImage, elem.magnifier);
$(elem).append(elem.magnifierContainer);
// Magnifier
// ----------------------------------
this.elemparent = elem;
this.syncedMagnifier = null;
// Synchronizes this Magnifier with another (propagating all actions to aMagnifier)
this.syncWith = function(aMagnifier) {
if (!(aMagnifier instanceof Magnifier)) {
return;
}
this.syncedMagnifier = aMagnifier;
aMagnifier.syncedMagnifier = this;
};
// Sets the position of the magnifier relative to the parent
this.setPosition = function(x, y) {
// Get native image resolution
var nativeImage = new Image();
nativeImage.src = $(elem.smallImage).attr("src");
var nativeWidth = nativeImage.width;
var nativeHeight = nativeImage.height;
console.log(nativeImage.width);
//alert(nativeImage.src + ": " + nativeWidth + " / " + nativeHeight);
// Calculate magnifier position and background-image offset
var imageWidth = $(elem.smallImage).width();
var imageWidth_2 = imageWidth / 2;
var imageHeight = $(elem.smallImage).height();
var imageHeight_2 = imageHeight / 2;
var magnifierImagePosX = Math.round(imageWidth_2 - x / imageWidth * nativeWidth * 2);
var magnifierImagePosY = Math.round(imageHeight_2 - y / imageHeight * nativeHeight * 2);
$(elem.magnifier).css({
"left" : x - elem.magnifier.width()/2,
"top" : y - elem.magnifier.height()/2,
"backgroundPosition" : magnifierImagePosX + "px " + magnifierImagePosY + "px"
});
};
// Sets the visibility of the magnifier
this.setVisible = function(bVisible) {
if (bVisible) {
$(this.elemparent.magnifier).fadeIn("fast");
} else {
$(this.elemparent.magnifier).fadeOut("fast");
}
}
// Parent Functionality
//-----------------------------------------------
// Add Event listening
elem.addEventListener("mousemove", function(event) {
var cursorX = event.pageX - $(self.elemparent).offset().left;
var cursorY = event.pageY - $(self.elemparent).offset().top;
// Check visibility
if ((cursorX > 0 && cursorX < $(self.elemparent.smallImage).width())
&& (cursorY > 0 && cursorY < $(self.elemparent.smallImage).height())) {
self.setVisible(true);
if (self.syncedMagnifier != null) {
self.syncedMagnifier.setVisible(true);
}
} else {
self.setVisible(false);
if (self.syncedMagnifier != null) {
self.syncedMagnifier.setVisible(false);
}
}
// Set position
self.setPosition(cursorX, cursorY);
if (self.syncedMagnifier != null) {
self.syncedMagnifier.setPosition(cursorX, cursorY);
}
});
};
var magnifier1 = new Magnifier(document.getElementById("magnifiedImage"));
var magnifier2 = new Magnifier(document.getElementById("magnifiedImage2"));
magnifier1.syncWith(magnifier2);
var放大镜=功能(elem){
var self=这个;
var imageUrl=”http://placehold.it/400x600";
//配置父成员字段
//----------------------------------------------
//设置布局
elem.magnifierContainer=$(“”).css({
“位置”:“相对”,
“游标”:“无”
});
元素放大镜=$(“”).css({
“位置”:“绝对”,
“高度”:“11em”,
“宽度”:“11em”,
“边界半径”:“50%”,
“盒影”:“3px 3px 5px#111”,
“背景”:“url(“+imageUrl+”)不重复”,
“显示”:“无”
});
elem.smallImage=$(“0&&cursorX<$(self.elemparent.smallImage.width())
&&(cursorY>0&&cursorY<$(self.elemparent.smallImage.height()){
self.setVisible(true);
if(self.syncedMagnizer!=null){
self.syncedMagnizer.setVisible(true);
}
}否则{
self.setVisible(false);
if(self.syncedMagnizer!=null){
self.syncedMagnizer.setVisible(false);
}
}
//设定位置
自身设置位置(游标,游标);
if(self.syncedMagnizer!=null){
self.syncedMagnizer.setPosition(游标、游标);
}
});
};
var magnifier1=新的放大镜(document.getElementById(“放大镜”);
var magnifier2=新的放大镜(document.getElementById(“magnifiedImage2”);
放大镜1.与同步(放大镜2);
编辑:我用另一个图像(不是从placehold.it)尝试了它,它成功了!?我真想知道为什么它不能用placehold.it图像
var Magnifier = function(elem) {
var self = this;
var imageUrl = "http://placehold.it/400x600";
// Configure Parent Member Fields
//----------------------------------------------
// Setup the layout
elem.magnifierContainer = $("<div>").css({
"position" : "relative",
"cursor" : "none"
});
elem.magnifier = $("<div>").css({
"position" : "absolute",
"height" : "11em",
"width" : "11em",
"border-radius" : "50%",
"box-shadow" : "3px 3px 5px #111",
"background" : 'url(' + imageUrl + ') no-repeat',
"display" : "none"
});
elem.smallImage = $("<img>").attr({
"src" : imageUrl
}).css({
"width" : "100%",
"height" : "100%",
"max-width" : "400px",
"max-height" : "600px",
});
$(elem.magnifierContainer).append(elem.smallImage, elem.magnifier);
$(elem).append(elem.magnifierContainer);
// Magnifier
// ----------------------------------
this.elemparent = elem;
this.syncedMagnifier = null;
// Synchronizes this Magnifier with another (propagating all actions to aMagnifier)
this.syncWith = function(aMagnifier) {
if (!(aMagnifier instanceof Magnifier)) {
return;
}
this.syncedMagnifier = aMagnifier;
aMagnifier.syncedMagnifier = this;
};
// Sets the position of the magnifier relative to the parent
this.setPosition = function(x, y) {
// Get native image resolution
var nativeImage = new Image();
nativeImage.src = $(elem.smallImage).attr("src");
var nativeWidth = nativeImage.width;
var nativeHeight = nativeImage.height;
console.log(nativeImage.width);
//alert(nativeImage.src + ": " + nativeWidth + " / " + nativeHeight);
// Calculate magnifier position and background-image offset
var imageWidth = $(elem.smallImage).width();
var imageWidth_2 = imageWidth / 2;
var imageHeight = $(elem.smallImage).height();
var imageHeight_2 = imageHeight / 2;
var magnifierImagePosX = Math.round(imageWidth_2 - x / imageWidth * nativeWidth * 2);
var magnifierImagePosY = Math.round(imageHeight_2 - y / imageHeight * nativeHeight * 2);
$(elem.magnifier).css({
"left" : x - elem.magnifier.width()/2,
"top" : y - elem.magnifier.height()/2,
"backgroundPosition" : magnifierImagePosX + "px " + magnifierImagePosY + "px"
});
};
// Sets the visibility of the magnifier
this.setVisible = function(bVisible) {
if (bVisible) {
$(this.elemparent.magnifier).fadeIn("fast");
} else {
$(this.elemparent.magnifier).fadeOut("fast");
}
}
// Parent Functionality
//-----------------------------------------------
// Add Event listening
elem.addEventListener("mousemove", function(event) {
var cursorX = event.pageX - $(self.elemparent).offset().left;
var cursorY = event.pageY - $(self.elemparent).offset().top;
// Check visibility
if ((cursorX > 0 && cursorX < $(self.elemparent.smallImage).width())
&& (cursorY > 0 && cursorY < $(self.elemparent.smallImage).height())) {
self.setVisible(true);
if (self.syncedMagnifier != null) {
self.syncedMagnifier.setVisible(true);
}
} else {
self.setVisible(false);
if (self.syncedMagnifier != null) {
self.syncedMagnifier.setVisible(false);
}
}
// Set position
self.setPosition(cursorX, cursorY);
if (self.syncedMagnifier != null) {
self.syncedMagnifier.setPosition(cursorX, cursorY);
}
});
};
var magnifier1 = new Magnifier(document.getElementById("magnifiedImage"));
var magnifier2 = new Magnifier(document.getElementById("magnifiedImage2"));
magnifier1.syncWith(magnifier2);