0

私はオブジェクトジェネレーターを持っています。正常に動作します。

'use strict';
function Div(isim) {
    this.loc = document.getElementById(isim);
    var style = window.getComputedStyle(this.loc);
    this.width = style.getPropertyValue('width');
    this.height = style.getPropertyValue('height');
    this.left = style.getPropertyValue('left');
    this.top = style.getPropertyValue('top');
}

しかし、後で要素のプロパティを更新しています

var d = new Div("d");
d.loc.style.left = getRandomInt(0, window.innerWidth - 50) + "px";
d.loc.style.top = getRandomInt(0, window.innerHeight - 50) + "px";
console.log(d.left); //gives auto
console.log(d.width); //gives the right value

そしてconsole.log(d.left)間違っています。私はすでにそれを修正する方法を見つけましたが、少し汚れていると思います:

var d = new Div("d");
d.loc.style.left = getRandomInt(0, window.innerWidth - 50) + "px";
d.loc.style.top = getRandomInt(0, window.innerHeight - 50) + "px";
d = new Div("d");
console.log(d.left); //gives the right value
console.log(d.width); //gives the right value

別の方法はありますか(私が好む1行)? 残念ながら、私は英語が苦手なので、質問、タイトルに誤りがあれば編集してください。

4

2 に答える 2

1

関数で this.left を変更します

this.left = function () {
    return window.getComputedStyle(this.loc).getPropertyValue('left');
}

次に、呼び出しでそれをに変更します

console.log(d.left());
于 2015-05-09T08:49:18.850 に答える
1

値はキャッシュされるため、再計算する必要があります。

function Div(isim) {
    this.loc = document.getElementById(isim);
    var style = window.getComputedStyle(this.loc);
    this.width = style.getPropertyValue('width');
    this.height = style.getPropertyValue('height');
    this.left = style.getPropertyValue('left');
    this.top = style.getPropertyValue('top');
    this.getStyle = function (prop) {
        return style.getPropertyValue(prop);
    }.bind(this);
}

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

var d = new Div("d");
d.loc.style.left = getRandomInt(0, window.innerWidth - 50) + "px";
d.loc.style.top = getRandomInt(0, window.innerHeight - 50) + "px";
console.log(d.getStyle('left'));
console.log(d.getStyle('width'));

http://jsfiddle.net/s72vg53z/1/

于 2015-05-09T08:59:00.317 に答える