正确和工作 - 手动调用d3缩放行为不会执行缩放

时间:2014-08-07 12:30:28

标签: javascript d3.js zooming

我有一个可以放大的雷达,如果我用鼠标滚动或捏缩放这一切都可以。但是,当我双击雷达内的弧线时,它需要放大它。 我用

删除了默认的双击
.on('dblclick.zoom',null);

我在每个弧上都有一个双击事件,可以双击(因此它不会通过缩放监听器)。此双击处理程序调用缩放侦听器缩放和转换函数,然后调用事件。我试过调用scale然后事件然后翻译然后事件但我得到相同的结果,没有缩放

 RadarDraw.ZoomListener.scale(6);
 RadarDraw.ZoomListener.translate([0, 0]);
 RadarDraw.ZoomListener.event(svg.transition().duration(500));

从我所看到的这应该工作。我在这里缺少什么吗?

由于 标记

我的缩放处理函数看起来像这样

function zoom(){
    if (d3.event.scale <= 1 || d3.event.scale > 5) {
            //on scale 1 (zoomed out) center the radar to its origianl position

            //if (RadarDraw.ZoomListener.scale() <= 1 && previousZoom)
            //{
            //    resetZoomOut();
            //    previousZoom = false;
            //}

            var scalesize;
            if (d3.event.scale <= 1)
            {
                scalesize = 1;
            }
            if (d3.event.scale > 5)
            {
                scalesize = 0.2;
            }

            $(".isadot").each(function (i, v) {
                var tmp = v;
                var PrevTransform = tmp.attributes["transform"].nodeValue;

                //copy translate only remove other scale
                var currentTrans = PrevTransform.split(" ");

                tmp.attributes["transform"].nodeValue = currentTrans[0] + " scale(" + scalesize + ")";
            });

            previousZoomLevel = d3.event.scale;

            return;
        } else {
           // RadarDraw.ZoomListener.translate(d3.event.translate);

            //allow panning not zoom between min and max
            svg.attr("transform", "translate("
            + (d3.event.translate[0] + (_config.Width / 2)) + "," + (d3.event.translate[1] + (_config.Height / 2))
            + ")scale(" + d3.event.scale + ")");

            if (d3.event.scale > 1)
                previousZoom = true;

            //if we are zoomed in and out previous zoom level is 5 or above then exit zoom (we are either scrolling out or pinching out of zoom)
            if (tools.IsArcFocused && previousZoomLevel >= 5) {
                tools.ExitZoom(false);
            }

            //scale the dots by the zom level
            var scalesize = 0.6;
            //switch (RadarDraw.ZoomListener.scale())
            //{
            //    case ():
            //        break;
            //    default:
            //        scalesize = 0.6;
            //        break;
            //}

            if (d3.event.scale <= 1) {
                scalesize = 1;
            }
            if (d3.event.scale >= 5) {
                scalesize = 0.4;
            }

            $(".isadot").each(function (i, v) {
                var tmp = v;
                var PrevTransform = tmp.attributes["transform"].nodeValue;

                //copy translate only remove other scale
                var currentTrans = PrevTransform.split(" ");

                tmp.attributes["transform"].nodeValue = currentTrans[0] + " scale(" + scalesize + ")";
            });

        }
}

修改

Rob是正确的,结果是.on(&#39; dblclick.zoom&#39;,null);这导致问题在9中,在评论之后它按预期行事。谢谢Rob来回,最后到达哈哈。

0 个答案:

没有答案