2011-07-03 23 views
1

jQueryを使用してHTMLページのどこにでもダブルクリックしてメッセージを残すことができるツールをまとめています。それは、メッセージの位置づけにかかわる不安を抱えています。マウスクリックの位置での位置を決定する

コード私は、現時点ではテストしてい:

$('body').bind('dblclick', function(e) { 

    var message = $('<div class="message">Form here</div>').css({ 
     'left' : e.pageX, 
     'top' : e.pageY 
    }); 

    $(this).append(message); 
}); 

これは、マウスクリックの位置に新しい「メッセージ」を作成します。これはある程度は機能しますが、ブラウザウィンドウのサイズが変更されるとすぐに、 'メッセージ'が位置をずらして移動します。私が最終的にメッセージを保存して(そしてそれらを取得する)ことを望んでいるので、すべてのブラウザのすべてのユーザの異なる場所にロードするのは理想的ではありません。そのページがメディアクエリを使用していても、メッセージをページレイアウトに添付します。

私が問題を理解したことは、ユーザーがクリックした最も近い要素を基準にメッセージを配置する必要があることです。質問は。どうすればいい?

ヒントやヒントがあれば幸いです。

更新04/07/11

私は以下の持っていた答えのほとんどは、私が後だ本当にありません。私はexample of my page to JSfiddleをアップロードして私の設定を表示しています。ここで問題となるのは、メッセージが相対位置に添付されるため、ブラウザウィンドウのサイズが変更されるとメッセージがコンテンツと共に移動することです。

たとえば、ページの第2段落にメッセージを添付すると、ブラウザー/デバイスの幅にかかわらず、その段落にスティックするメッセージを取得する方法を教えてください。私が知る限り、メッセージを相対的に配置するために使用できる最も近いブロックレベルの要素(またはIDまたはクラスを持つ要素)を確立する必要があります。

あなたのご意見をお寄せいただきありがとうございます&ご質問ありがとうございます。

+0

私の答えを無視して、私のディクレキシックなお尻は質問を正しく読まなかった。 HTMLページの一番上の要素に十字要素を挿入します。ブラウザからXとYを計算するのではなく、この最も上の要素からXとYを計算するのではなく、これはボックスがサイズ変更の上を移動することを意味するはずです。 –

答えて

0

これがなければならないあなたは、私があなたのページ上の単一のdivを置くことを示唆しているのdiv

$(window).resize(function() { 
    $('body').prepend('<div>' + $(window).width() + '</div>'); 
}); 
+0

こんにちは。私のコードはすでにマウスの位置を追跡しています。質問はもう少し複雑です。 – Scott

0

の位置を変更するresize()を使用することができ、マウスの動きを追跡する方法をこれに沿ってhttp://docs.jquery.com/Tutorials:Mouse_Position#How_do_I_find_the_mouse_position.3F

jQuery(document).ready(function(){ 
    $(document).mousemove(function(e){ 
     $('#status').html(e.pageX +', '+ e.pageY); 
    }); 
}) 

を示し、幅と高さが固定されています。 bodyではなく、dblclickの機能をdivに適用してください。

動的なdiv要素を絶対位置に配置して、正しい位置に表示することもできます。ここにはexample fiddleがあります。

+0

こんにちはJames。これをどのWebページでも動作させたいので、メッセージを配置できるキャンバスを制限することは難しいでしょう。おそらく幅と高さの100%であるdivでボディをラップすることはトリックを行います...あなたは私に何を試すことができるかというアイデアを与えたかもしれません! – Scott

0

あなたがメッセージのdivを配置する必要があります。

$('body').bind('dblclick', function(e) { 

    var message = $('<div class="message">Form here</div>').css({ 
     'left' : e.pageX, 
     'top' : e.pageY, 
     'position' : 'fixed', 
     'zIndex': 999999 
    }); 

    $(this).append(message); 
}); 
限り、潜在的にいくつかの問題がある、私が言うことができるように

http://jsfiddle.net/PvFTN/

+0

こんにちはAlienWebguy。残念ながら、固定された位置は私の問題を解決しません。コンテンツは依然としてメッセージとは関係なく動きます。スクロールすると、私が探している振る舞いが損なわれます。 – Scott

2

:最初、私はあなたがそれを確認する必要がありますされて見ることができます"body"要素はページ全体をカバーします。なぜなら、それはボックスが許す限り拡張するからです。 (私は通常、divの背景を設定するだけで普通はその範囲を見ることができますが、bodyタグは特殊なケースです。その背景はブラウザの可視領域全体に広がっていますが、ボックスの場合もありません)

第2に、CSSの "position"プロパティを "absolute"に設定することが重要です。 :

$('body').bind('dblclick', function(e){ 

     var message = $('<div class="message">Form here</div>').css({ 
      'position' : 'absolute', 
      'left' : e.pageX, 
      'top' : e.pageY 
     }); 

     $(this).append(message); 
    }); 
+0

こんにちはTom。ご回答有難うございます。私はメッセージが既にCSSを使って絶対的に配置されていることを忘れていました。問題は、ブラウザウィンドウを絶対サイズのアイテムでサイズ変更すると、コンテンツが移動し、メッセージが固定位置にとどまることです。私は、メッセージが常にページの内容と関連していることを確認しようとしています。私の心の中でこれを達成する唯一の方法は、ちょうどクリックされたコンテンツに対する相対的な位置にある。これが真の問題です。 – Scott

+0

私は中央のdivを持っていると仮定しています。これには幅が与えられ、次にmargin-leftとmargin-rightのプロパティがautoに設定されて中央に残るようにします。これは、ウィンドウが水平方向にリサイズされると、あなたの絶対的に配置されたdivが中央のdivにまたがって "スライド"することを意味します。これが当てはまる場合は、身分ではなくdivに追加する必要があります。そうすれば、相対的な位置ではなく、相対的な位置に相対的ではありますが、親の箱の私はそれを見て、あなたに戻ってきます –

関連する問題