【问题标题】:I can't drag and zoom at the same time in d3.js (Ionic 6: Angular)我不能在 d3.js (Ionic 6: Angular) 中同时拖动和缩放
【发布时间】:2023-01-20 02:34:45
【问题描述】:

当我首先调用拖动时,缩放不起作用。当我首先调用缩放时,拖动不起作用。

我正在使用 Ionic Framework 6 版本(Angular)编写这些代码。

const w = window.screen.width;
const h = window.screen.height;

const scl: any = Math.min(w, h) / 2.5;
const sensitivity = 75;

const projection: any = d3.geoOrthographic()
    .scale(scl)
    .translate([ w/2, h/2 ]);

const initialScale = projection.scale();

let path = d3.geoPath()
    .projection(projection);

const svg: any = d3.select('#globe')
    .append('svg')
    .attr('width', w)
    .attr('height', h);

const map = svg.append('g');

const drag: any = d3.drag()
    .on('drag', (event) => {
        const rotate = projection.rotate();
        const k = sensitivity / projection.scale();

        projection.rotate([
            rotate[0] + event.dx * k,
            rotate[1] - event.dy * k
        ]);

        path = d3.geoPath().projection(projection);
        svg.selectAll('path').attr('d', path);
    });

svg.call(drag);

const zoom: any = d3.zoom()
    .scaleExtent([1, 10])
    .on('zoom', (event) => {
        if (event.transform.k > 0.3) {
            projection.scale(initialScale * event.transform.k);
            path = d3.geoPath().projection(projection);
            svg.selectAll('path').attr('d', path);
            map.attr('r', projection.scale());
        } else {
            event.transform.k = 0.3;
        }
    });

svg.call(zoom).on('dblclick.zoom', null);

提前致谢。

我试过 map.call() 而不是锤子.jssvg.call() 但我不能同时运行这两个功能。

【问题讨论】:

    标签: angular ionic-framework d3.js


    【解决方案1】:

    是的,我也需要帮助。那很烦人

    【讨论】:

    • 请评论/关注
    猜你喜欢
    • 1970-01-01
    • 2021-01-26
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2017-05-14
    • 2023-03-25
    • 2013-07-13
    相关资源
    最近更新 更多