グーグルクロームのキャンバス要素に問題があります。
複数の長方形が描かれたキャンバスがあります。私はtargetsという名前の配列内の長方形を追跡します。マウスがキャンバス上を移動するたびに、ホバー関数を呼び出して、マウスがいずれかの長方形の上にあるかどうかを確認します。
長方形の上にある場合は、長方形を単色で塗りつぶす必要があります。
このjavascript行を見てください:
function hover() {
var location = Sys.UI.DomElement.getLocation(canvasElement);
// loop through all rectangles in the targets array and caluclate if the mouse is on top op any of these rectangles.
}
これはIEとFirefoxで正常に機能します。
しかし、グーグルクロームでは、長方形の上にある長方形と同じ寸法の領域にカーソルを合わせると、長方形が塗りつぶされます。
長方形の実際の位置から常に同じ距離にあるため、Sys.UI.DomElementgetLocationメソッドがGoogleChromeで異なる値を返すことがすぐにわかりました。
結果は次のとおりです。
Firefox:
var location = Sys.UI.DomElement.getLocation(canvasElement);
location.x = 545
location.y = 297
チョメ:
var location = Sys.UI.DomElement.getLocation(canvasElement);
location.x = 544
location.y = 94
つまり、水平方向に1ピクセル、垂直方向に200ピクセルより少し多くなります。
これで、長方形の上の領域にカーソルを合わせると、長方形が塗りつぶされるようになることがわかりました。
しかしもちろん、私はグーグルクロームでこの振る舞いを避けるために何をすべきか知りたいです。
何か考えはありますか?
どんな助けでも大歓迎です。
ありがとう!
より詳しい情報:
MSDN:リンク
Sys.UI.DomElementgetLocationメソッド
所有者のフレームまたはウィンドウの左上隅を基準にしたDOM要素の絶対位置を取得します。