ヒートマップアプリケーションとストアがあり、クリックのx、y座標とビューポートの幅と高さを保存しています。 2回のクリックに対する実際のデータ:スクリーンサイズに基づいてx、y座標を再計算する方法
x, y, width, height
433, 343, 1257, 959
331, 823, 1257, 959
レスポンシブサイトで画面のサイズを変更すると、表示されたクリックがすべてオフになる問題があります。私は自分の検索で空になっていますが、異なる解像度のx座標とy座標を再計算するための数式やアルゴリズムがあります。たとえば、width
が1257
から990
に、height
が959
からになる場合の最初のクリックは、どのようにxとyを再計算して同じ場所に並んでいるのですか?
EDIT: I幅のx
率と高さのy
パーセンテージを格納するデータベース、width_percentageおよび高パーセンテージ に2つのフィールドを追加しました。したがって、x
が433で、画面の幅が1257の場合、x
は画面の左端から35%でした。私は高さについて同じ理論を使用して計算を実行しましたが、スケーリング解像度にはパーセンテージがありますが、クリックドットを同じ場所に拡大しませんでした。私は、フル解像度1257の幅をクリックしてから900幅で再オープンしてこれをテストします。低い解像度でクリックドットを表示するコードについては、下記を参照してください。
のAjax PHP
while ($row = mysql_fetch_array($results)) {
if($_GET['w'] < $row['width']) {
$xcorr = $row['width_percentage'] * $_GET['w'];
$ycorr = $row['y'];
}
}
これは、ページの読み込みの画面解像度の幅と高さを渡し、$_GET
変数を使用しています。次に、クリックドットを$results
としてデータベースから取得します。解像度の幅を1257から900に変更するだけなので、高さと最初のクリックと同じピクセルの計算には入れませんでした。新しい幅Iにパーセンテージを掛け、スクリーンの左側からそのパーセンテージマージンを設定します。パーセンテージは35% なので、新しいx座標は左端から900 *.35 = 315px
になります。それはうまくいきませんでしたし、私は頭の上で頭を傷つけて、反応するサイトのために同じ場所をクリックし続けます。
いくつかのコードを表示する必要があります。しかし、おそらく解決策は、 'document'に' resize'リスナを追加し、 'element.getBoundingClientRect()'でいくつかのマジックを行うことです。質問に対する次の回答を参照してください。[HTML要素の位置(X、Y)を取得する](http://stackoverflow.com/a/11396681/691711) – zero298
x.y座標以外にも、イベントのターゲット要素も保存します。今度は、いくつかのサイズ変更リスナーをドキュメントに保持し、サイズ変更イベントで保存された要素のx、y座標を再計算します。 –
あなたは '$ row'で正しい値を得ていますか? 'var_dump($ row)'を試してください。また、「それはうまくいきませんでした」とどういう意味ですか?今回の結果は何でしたか?以前と同じですか、それとも別のものですか? –