You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用D3(v3.4.12)在触控设备拖放时源与目标元素相同的问题

触控设备拖放功能:源与目标元素识别异常

在触控设备上实现拖放功能时,出现源元素与目标元素识别错误的问题:理想状态下,从Polygon1拖拽到Polygon2时,touchstart触发的源元素应为Polygon1,touchend触发的目标元素应为Polygon2,但实际测试中两次打印的元素ID均为Polygon1。

输出截图:拖放识别错误输出

相关代码

var amatrix = [1, 0, 0, -1, 0, 500];
var svg = d3.select('body').append('svg')
    .attr('height', 500)
    .attr('width', 700);
var grp = svg.append("g")
              .attr("transform", "matrix(" + amatrix + ")");

grp.append('polygon')
   .attr('points', "50,50 150,50 150,150 50,150")
   .attr('stroke', '#f00')
   .attr('fill', 'red')
   .attr("id", 'Polygon_1');

grp.append('polygon')
   .attr('points', "200,200 300,200 300,300 200,300")
   .attr('stroke', '#f00')
   .attr('fill', 'blue')
   .attr("id", 'Polygon_2');

grp.append('polygon')
   .attr('points', "350,350 450,350 450,450 350,450")
   .attr('stroke', '#f00')
   .attr('fill', 'green')
   .attr("id", 'Polygon_3');               

svg.on("touchstart", function (event) {
       console.log(d3.event.srcElement.id);
       console.log('touchstart');
       d3.event.preventDefault();
       d3.event.stopPropagation();
   }, { passive: false }); 

svg.on("touchend", function (event) {
       console.log(d3.event.srcElement.id);
       console.log('touchend');
       d3.event.preventDefault();
       d3.event.stopPropagation();
   }, { passive: false });    

内容的提问来源于stack exchange,提问作者Godson Dabre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:41:15