【问题标题】:how to deal with the current data when zoom in and out放大和缩小时如何处理当前数据
【发布时间】:2017-08-30 19:16:50
【问题描述】:

当鼠标滚轮滚动时,如何保证图表线的画布可以随鼠标位置放大和缩小?

在我的图表线画布中,我没有使用 chart.js 或 d3.js 或其他库。我希望它可以围绕鼠标位置进行放大和缩小,但值会随着放大和缩小而变化。如何确保中心点 - 鼠标位置 - 不受坐标系变化的影响。

【问题讨论】:

  • 您是否使用transform: scale() 进行放大和缩小?

标签: html canvas


【解决方案1】:

如果您使用 CSS transform 属性 scale(),那么您可以设置另一个名为 transform-origin 的规则。如果在应用scale() 之前将其设置为屏幕中心,则页面将正确放大。

// 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()方法实现滚动激活了:

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]);


});

【讨论】:

  • 我没有使用 CSS 和转换。我在做图表线的历史数据,通过改变图表线两点之间的间距并重新绘制它来获得放大和缩小的结果。我想做一个像这样的演示:app.expertoption.com 我几乎完成了我的演示,除了这个——我不知道如何处理当前的数据,可以使它随着鼠标位置放大和缩小。我只是让它在屏幕的左侧放大和缩小。
  • 好吧,如果你不提供一些详细信息和一些代码,我们帮不了你
  • 好的!还是谢谢你:)
  • 您可以编辑您的问题以提供更多详细信息,以便我们为您提供帮助
猜你喜欢
  • 1970-01-01
  • 2015-08-29
  • 2015-07-17
  • 1970-01-01
  • 2017-08-09
  • 2016-06-18
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
相关资源
最近更新 更多