2012-04-12 10 views
6

ラファエルを使用してキャンバス上に円と四角形を描くことができる、単純なアプリケーションからいくつかのコードを適用しようとしています。 (元のコードはhttps://gist.github.com/673186event.layerXとevent.layerYの使用を置き換えるためのクロスブラウザソリューション

元のコードでは古いバージョンのjQueryを使用していましたが、うまくいきました。 http://jsfiddle.net/GHZSd/

ただし、更新されたバージョンのjQueryを使用すると、この例は破損します。 http://jsfiddle.net/GHZSd/1/

この理由は、event.layerXとevent.layerYが新しいバージョンのjQueryで定義されなくなったからです。私の質問は - 私はそれらの値を置き換えるために使用できるコードは何ですか?私はちょうどいくつかの数学(event.originalEvent.layerX/layerXはまだ存在するので、私はちょうどそれらの値になるいくつかのものを追加/減算しようとしている)しかし、これまでのところいくつかのことを試してきましたブラウザはすべてのブラウザで動作しません。

申し訳ありませんこれまでに尋ねられたことがありましたが、私はSOや他の場所で具体的な回答を見つけることができませんでした。

+0

ライブラリ依存関係の歓迎へようこそ。古いjQuery(なぜアップグレードしていますか?)や、以前のバージョンでレイヤーがどのように実装されているかを調べて、新しいレイヤーに再実装することができます。 – RobG

+0

元のイベントを使用しない理由は分かりませんが、正常に動作します:http://jsfiddle.net/GHZSd/19/ – mddw

+0

@RobG - 私のプロジェクトの他の要素のためのjQueryの更新版が必要です。 – zeke

答えて

9

Chromeチームは、奇妙な理由でlayerXとlayerYを削除したいので、この問題について少し考えました。

まず、我々はあなたのコンテナの位置を必要とする:

var position = $paper.offset(); 

(フィドルずに読んでそれらのための$紙は、SVGが描画されるdiv要素である、開かれた)

それは私たちに2を与えますcoords、position.topposition.leftなので、ページ内のどこにコンテナがあるかわかります。

クリックすると、e.pageXe.pageYが使用されます。これはページの座標です。クロム、サファリ、FFとオペラhttp://jsfiddle.net/GHZSd/30/

作品:layerXとlayerYをエミュレートするために、我々は(e.pageX - position.left)(e.pageY - position.top)

のEtほらを使用しています。

+0

うん、うん。私は似たような解決策をとった。 1つの奇妙なことは、私が投稿した例ではうまくいくが、私のアプリでは、Chromeを使用しているときにXとYの両方に1ピクセルの違いがあることが分かっている。大したことではなく、そこには、すべてのブラウザでoriginalEvent.layerX/layerYと等しいすべてを等式に加えることができる他のプロパティがあります。これが最善のアプローチかどうかは分かりませんが、うまくいくようです... – zeke

関連する問題