2016-08-22 4 views
0

Я искал вокруг и не нашел твердого решения для установки масштаба масштабирования, когда пользователь дважды щелкает по экрану.D3 - Установка масштаба масштабирования двойного щелчка

Самая дальняя я получил, установив scaleVal, как показано в функции dblclicked(), как показано здесь, в скрипку

https://jsfiddle.net/helloGoodDay/62vq9h8p/3/

  function dblclicked() 
      { 
       var translate = zoom.translate(), 
        mouse = d3.mouse(this), 
        scaleOld = zoom.scale(), 
        zoomOld = Math.log(scaleOld)/Math.LN2, 
        zoomNew = d3.event.shiftKey ? Math.max(minScale + 8, Math.ceil(zoomOld) - 1) : Math.min(maxScale + 8, Math.floor(zoomOld) + 1), 
        scaleNew = Math.pow(scaleVal, zoomNew), 
        zoomDelta = scaleNew/scaleOld; 

       svg.transition() 
        .duration(350) 
        .call(zoom 
        .scale(scaleNew) 
        .translate([(translate[0] - mouse[0]) * zoomDelta + mouse[0], (translate[0] - mouse[0]) * zoomDelta + mouse[0]]) 
        .event); 

       d3.event.stopImmediatePropagation(); 
      } 

Однако, если вы дважды щелкните немного больше, узлы исчезают и мне тоже не нравится анимация.

Есть ли способ установить значение масштаба масштабирования таким образом, чтобы узлы не исчезали и что анимация не является этой нерешительностью?

Edit: Функция от https://github.com/d3/d3/issues/1985

+0

Вы хотите установить максимум значение масштабирования? Потому что, если вы уменьшаете масштаб масштабирования, он всегда будет бесконечным увеличением. –

+0

Благодарим вас за ответ. В скрипке текущий масштаб увеличивается от 1 до 1000. Так что да, я уже установил максимальное значение масштабирования. – helloGoodDay

ответ

0

Ok скажите мне, если это решение костюм вашей проблемы

https://jsfiddle.net/qm6h4wm7/2/

То, что я сделал:

  • уменьшить масштаб между каждым увеличением (1)

  • предел 5 масштабирования для того, чтобы всегда иметь узел в представлении (2)

таким образом, что узлы не исчезают

(1) scaleNew = Math.pow(2, zoomNew) 

(2) if(zoomNew<5){...} 
+0

Спасибо, что нашли время, чтобы ответить на этот вопрос. Ваше текущее решение очень похоже на то, которое я сделал, чтобы ограничить масштабирование, а затем увеличить масштаб, как только они достигнут максимального увеличения. Наши ответы были быстрым решением. Наверное, я ищу решение, в котором, если и увеличить масштаб, узлы не исчезнут, и если решение можно будет сделать без анимации. – helloGoodDay

+0

Извините, я думаю, что не понимаю вас, когда вы говорите: «узлы не исчезнут». если вы заблокируете максимальное увеличение, они не исчезнут ... нет? Для эффекта анимации кажется, что вы хотите вызвать эффект колесика прокрутки на двойном клик-событии, нет? Вы пытались это сделать? –

+0

Благодарим вас за ответ. Теперь я понимаю, почему узлы исчезают, потому что масштабные масштабирования прошли максимальную степень. Вы правы для этого примера, он не исчезнет. Я не знаю, как снять анимацию или изменить ее, чтобы сделать ее более гладкой. В качестве быстрого решения я увеличил продолжительность анимации. – helloGoodDay

Смежные вопросы