Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何覆盖C3.js中的拖动事件_Javascript_D3.js_Event Handling_Dom Events_C3.js - Fatal编程技术网

Javascript 如何覆盖C3.js中的拖动事件

Javascript 如何覆盖C3.js中的拖动事件,javascript,d3.js,event-handling,dom-events,c3.js,Javascript,D3.js,Event Handling,Dom Events,C3.js,我目前正在尝试实现一个与现有功能略有不同的缩放功能。 实际上,我希望如果用户点击并拖动图形,它会在定义的域上缩放。我希望这样做,因为使用鼠标滚轮可以防止用户上/下页面 由于使用C3.jsapi似乎不可能,我尝试通过在D3.js上进行以下小演练来实现拖动事件。 然而,当我在图表上尝试它时,我没有很好地理解它,因为它不起作用 以下是我的代码示例: function setHandlers() { /** * A custom drag event to zoom on the g

我目前正在尝试实现一个与现有功能略有不同的缩放功能。
实际上,我希望如果用户点击并拖动图形,它会在定义的域上缩放。我希望这样做,因为使用鼠标滚轮可以防止用户上/下页面

由于使用
C3.jsapi
似乎不可能,我尝试通过在D3.js上进行以下小演练来实现拖动事件。 然而,当我在图表上尝试它时,我没有很好地理解它,因为它不起作用

以下是我的代码示例:

function setHandlers() {
    /**
     * A custom drag event  to zoom on the graph
     */

    var drag = d3.behavior.drag();
    d3.selectAll('.c3-event-rects').on(".drag", null);

    drag
        .on('dragstart', function (d) {
            d3.event.sourceEvent.stopPropagation();
            console.log("start");
            console.log(d)
        })
        .on('drag', function (d) {
            console.log("on bouge :)")           
        })
        .on('dragend', function (d) {
            console.log("end");
            console.log(d)
         })
}

每当我刷新图形时,我都会调用这个函数,并且我已经为双击编写了一个自定义处理程序(在同一个函数中,但为了更清楚起见,我将其关闭)。我想知道如何在C3.js图形中成功触发拖动事件,特别是
dragstart
dragend
事件?

C3事件矩形标记驱动事件的层(工具提示、单击等)。除非希望事件反应被偏移,否则通常不希望移动此按钮(例如,当您将鼠标悬停在bar 1之外的其他位置时,会得到bar 1工具提示)

此外,该层的不透明度设置为0,因此除非覆盖其不透明度,否则实际上无法看到它移动。差不多

.c3-event-rects {
   fill: red;
   fill-opacity: 0.2 !important;
}
也就是说,你是如何做到这一点的

var drag = d3.behavior.drag()
            .origin(function () {
                var t = d3.select(this);
                var translate = d3.transform(t.attr('transform')).translate;
                return { x: translate[0], y: translate[1]};
            })
            .on("drag", function () {
                d3.select(this)
                    .attr("transform", "translate(" + d3.event.x + " " + d3.event.y + ")")
            })
d3.selectAll('.c3-event-rects').call(drag);

小提琴-


下面是它的外观-红色点是我将鼠标放在上面的位置,以便为第一组条显示工具提示


谢谢分享您的经验,但这里是发布问题的地方。请问你的具体问题是什么?哦,很抱歉,我忘记了我文章的这一部分,因为我太专注于解释我的问题了。这是我的帖子的编辑版本,我在这里添加了我的问题。我想知道如何在C3.js图形中成功触发拖动事件,特别是dragstart和dragend事件?你在谷歌搜索过吗?是的。我刚刚对我的代码进行了更改,现在可以使用了。var drag=d3.behavior.drag().on(“drag”,function(){})d3.selectAll('.c3 event rects')。调用(drag)现在我需要恢复与开始点和结束点对应的x,这似乎很棘手。非常感谢,很酷blue@Seddiki阿纳斯-你把这件事彻底解决了吗?干杯