2017-08-30 4 views
0

マウスホイールをスクロールすると、グラフのキャンバスがマウスの位置でズームイン/ズームアウトできることを確認するにはどうすればよいですか?ズームイン時とアウト時の現在のデータを処理する方法

私のキャンバスチャートでは、chart.jsやd3.jsなどのライブラリを使用していません。マウスの位置を中心にズームイン/ズームアウトすることができると予想していますが、ズームインとズームアウトで値が変わります。マウスの位置の中心点が座標系の変更の影響を受けないことを確認する方法。

+1

あなたは'変換を使用しています

// performs the change of origin and scales the body element zoom(scale, mouse) { return $('body').css('transformOrigin', getMouse(mouse)) .css('transform', 'scale('+scale+')'); } // returns a string of the current center of screen getMouse() { let midX = window.innerWidth/2; let midY = window.innerHeight/2; let x = $('body').css('left').split('p')[0]; let y = $('body').css('top').split('p')[0]; return String(midX - x + 'px ') + String(midY - y + 'px'); } 

は、その後、あなたはbind()方法でスクロール活性化を実現することができますか? – Ivan

答えて

1

CSS transformプロパティscale()を使用している場合は、transform-originという別のルールを設定できます。 scale()を適用する前に画面の中央に設定すると、ページが正しく拡大されます。スケールを() `ズームイン、ズームアウトする:

let scale = 1; 
let scrollFactor = -0.1; 
$(window).bind('wheel mousewheel', function(e){ 

    let scroll = e.originalEvent.deltaY; 
    let sign = Math.sign(scroll); 
    let newScale = Math.round((scale + scrollFactor * sign)*100)/100; 

    // you could set an if statement here before calling zoom() to 
    // set a lower and higher zoom limit 
    zoom(newScale, [e.pageX, e.pageY]); 


}); 
+0

私はCSSを使用せず、変換していません。 私は、チャートラインの2点間の間隔を変更し、それを再描画してズームインとズームアウトの結果を得ることによって、チャートラインの履歴データを作成しています。私はこのようなデモをしたいと思う:https://app.expertoption.com/ 私はデモをほぼ終えているが、私はそれをズームインしたりズームアウトしたりすることができる現在のデータにどう対処するかは知らないマウスの位置。画面の左側でズームイン/ズームアウトします。 –

+0

もしあなたがいくつかの詳細な情報**といくつかのコード**を与えなければ、私たちはあなたを助けることができません – Ivan

+0

とにかくありがとうございます:) –

関連する問題