我试图在成功加载图像后调用函数this._best(),但是我收到了类型错误。 this._best()是一个函数,因为我在许多不同的地方使用它并且它正在工作。只要我把它放在javascript中的onload事件中,就会显示typeError或referenceError。
我希望在实际加载图像后获取图像的高度和宽度,然后在获得这两个值后调用_best()函数。
我尝试了很多方法,包括:
this.svg.onload = function() {
this.svg.addEventListener('load', function() {
this._W = jQuery(".Image").width();
this._H = jQuery(".Image").height();
this._best();
});
}.bind(this);
和
this.svg.addEventListener('load', function() {
this._W = jQuery(".Image").width();
this._H = jQuery(".Image").height();
this._best();
});
我设置断点以查看断点,并且在调用_best()时始终显示错误
我还尝试使用警报进行测试:
this.svg.onload = function() {
this.svg.addEventListener('load', function() { alert('loaded'); });
this._W = jQuery(".Image").width();
this._H = jQuery(".Image").height();
this._best();
}.bind(this);
这成功地称为_best();并在成功加载图像后显示警报。但我仍然只想获取宽度和高度的值,并在加载图像后调用_best()。
在这种情况下,我第一次加载图像时得到的宽度和高度值不正确,因为chrome没有正确加载图像但如果我再次加载它从缓存中获取值,它似乎工作因此为什么我想要从事件中获取宽度和高度。
在init函数中我有: this.canvas = document.createElement(“div”);
我的职能:
this.svg = document.createElement("object");
this.svg.setAttribute("type","image/svg+xml");
this.svg.setAttribute("data",url);
this.svg.setAttribute("class", "Image");
this.canvas.appendChild(this.svg);
this.svg.onload = function() {
this.svg.addEventListener('load', function() {
this._W = jQuery(".Image").width();
this._H = jQuery(".Image").height();
}.bind(this);
this._best();
}.bind(this);
和_best()函数类似于:
function _best() {
var a = this.canvas.clientWidth / this._W;
var b = this.canvas.clientHeight / this._H;
}
最佳拟合用于使图像居中。我在其他情况下使用此功能,所以这是有效的,但在这种情况下,当我加载第一次_H和_W不同于我第二次加载它。我猜chrome实际上并没有完全加载图像,直到我第二次点击加载图像。
如何在加载图像时获得_W和_H(就像我得到的第二个加载值一样),如果在onload上检索这两个值,我怎样才能调用_best()?
答案 0 :(得分:1)
您还需要bind(this)
addEventListener
,因为它会创建另一个关闭。
所以
this.svg = document.createElement("object");
this.svg.setAttribute("type","image/svg+xml");
this.svg.setAttribute("data",url);
this.svg.setAttribute("class", "SVGImage");
this.canvas.appendChild(this.svg);
this.svg.onload = function() {
this._W = jQuery(".SVGImage").width();
this._H = jQuery(".SVGImage").height();
this._best();
}.bind(this);
我还要将_best
定义为
this._best = function () {
var a = this.canvas.clientWidth / this._W;
var b = this.canvas.clientHeight / this._H;
}.bind(this);