2017-08-22 5 views
5

Butterfly Builderアプリのthis pageのカスタムカーソルを使用して、カラーパレットセクションで色を適用すると、Safariはマウスが動いているカーソルを一列に並べません.canvas-container上で、これをラインアップするために、これらの両方を試してみましたが、それは動作しますたことがない:Safariマウスの左位置(x座標)が正しく表示されない

var pBucketHTML = $('<div id="pBrush"><span class="color"></span></div>'); 
pBucketHTML.css('top', ((e.offsetY + $(this).offset().top) - (pBucketHTML.height()/2))); 
pBucketHTML.css('left', ((e.offsetX + $(this).offset().left) - (pBucketHTML.width() * 2))); 

var pBucketHTML = $('<div id="pBrush"><span class="color"></span></div>'); 
pBucketHTML.css('top', e.pageY - (pBucketHTML.height()/2)); 
pBucketHTML.css('left', e.pageX - (pBucketHTML.width() * 2)); 

LESS私はこのために使用しています:

#pBrush { 
    width: 24px; 
    height: 34px; 
    background: transparent url('../images/paintBrush.png') left bottom no-repeat; 
    position: fixed; 

    .color { 
     position: absolute; 
     width: 12px; 
     height: 12px; 
     border: 1px solid #FFFFFF; 
     display: inline-block; 
     top: 0; 
     right: 0; 
     left: 0; 
     margin: 0 auto; 
    } 
} 

これはChromeと他のすべてのブラウザでマウスカーソルを完全にうまく読み込んでいますが、Safariは正しいX座標を読み込んでいません。 X座標ではなく、Butterfly Builderで.canvas-containerのマウスを動かすときに、Y座標が正しいかのように見えます。 Safariでこれを修正するには?

私の言うことを知りたい場合は、http://memorial.gardenにアクセスし、ページの右下にある「Launch Butterfly Builder」ボタンをクリックしてください。手順2に進み、カラーパレットを選択すると、pBrush要素の問題が表示されます。なぜこれが起きているのか分かりません。

Butterfly Builder Custom Custor Problem in Safari

+2

これは奇妙なことですが、私はSafariでテストしても問題なく動作します。 Safariのどのバージョンを実行していますか? – hallleron

+0

Mac YosemiteでSafari - Version 8.0(10600.1.25.1)を使用すると便利です。 –

+2

El CapitanのSafariバージョン10.1.2(11603.3.8)で正しく動作していることを確認できます。 – Stuart

答えて

0

、それは非常によく、ここで文書化されているので、私は、詳細には触れません。Position:fixed element within a position:relative parent. Which browser renders correctly?

は基本的に、問題は、ブラウザがposition:fixed;要素を処理する方法です。

この問題を解決するには、#pBrush LESSにposition: relative;と入力してください。

#pBrush { 
    width: 24px; 
    height: 34px; 
    background: transparent url('../images/paintBrush.png') left bottom no-repeat; 
    position: relative; 

    .color { 
     position: absolute; 
     width: 12px; 
     height: 12px; 
     border: 1px solid #FFFFFF; 
     display: inline-block; 
     top: 0; 
     right: 0; 
     left: 0; 
     margin: 0 auto; 
    } 
} 

そして、あなたのJavaScriptでは、あなたのcanvas

pBucketHTML.css('left', e.pageX - $("#canvasBuilder").offset().left - (pBucketHTML.width()/2)); 

のオフセットに基づいて補正するあなたは少し、これを微調整する必要があるかもしれないが、私はそれはあなたが探しているものであると信じています。


編集:Safariの8のためのハック回避策場合How to detect my browser version and operating system using JavaScript?から適応、許容可能である:

function returnSafariOffset() { 
    var nAgt = navigator.userAgent; 

    // We have Safari 
    if ((verOffset=nAgt.indexOf("Safari"))!=-1) { 
    fullVersion = nAgt.substring(verOffset+7); 
    if ((verOffset=nAgt.indexOf("Version"))!=-1) { 
     fullVersion = nAgt.substring(verOffset+8); 
    } 

    majorVersion = parseInt(''+fullVersion,10); 
    if (isNaN(majorVersion)) { 
     fullVersion = ''+parseFloat(navigator.appVersion); 
     majorVersion = parseInt(navigator.appVersion,10); 
    } 

    if (majorVersion == 8) { 
     // Return a custom amount for Safari 8: 
     return $("#canvasBuilder").offset().left; 
    } 
    } 
    // Return an amount for all other browsers: 
    return 0; 
} 

次に、あなたのJavaScriptで、あなたはこのような何かを行うことができます

pBucketHTML.css('left', e.pageX - returnSafariOffset() - (pBucketHTML.width()/2)); 

あなたは私と同じ結果を得ているようには見えないので、自分のものを正確に取得するためには、何らかの形で実験しなければならないかもしれません探している。あなたに質問がある場合はお知らせください。

+1

これは残念ながらSafariの問題を解決するものではありません。これを適用すると、他のすべてのブラウザでも問題が発生します。オフセットは現在Safariに設定した写真と同じですが、これは他のすべてのブラウザで問題になります。私はlocalhost btwでこれをテストしました。 –

+0

そのため、 '$("#canvasBuilder ")。offset()。left'を追加する必要があります。 – Jonathan

+0

これを追加する必要がありますか?あなたの例では、それを減算しているからです。私はあなたの例を試したが、それはすべてのブラウザで問題を引き起こす。 –

0

あなたが最初のカスタムポインタのあなたのJS計算をチェックする必要があります: enter image description here

ブルードットは、実際のカーソル位置で、赤いブロックは、お使いの#pBrushです。 #pBrushの中点が実際のカーソルの位置と同じであることを確認してください。次に、次のことについて考えることができます。

+0

pBrushをクリックしてもキャンバス上をクリックせずキャンバス上でクリックイベントが発生しないため、このオフセットが元々必要でしたが、おそらくpBrush上に 'pointer-events:none'を設定するだけでした素子。しかし、私はこれが別の問題を引き起こしていることを思い出しています。そのため、私はこれを正確には行なわず、実際のマウスはpBrush要素の外にある必要があります。 –

関連する問題