2015-12-17 9 views
0

Я пытаюсь нарисовать те же элементы с paperjs на связке различных устройств в реальном времени (пути обмениваются через nodejs).эквивалент Paper.js для setViewBox Рафаэля (увеличение/уменьшение при изменении окна)

Проблема: смартфон в портретном режиме имеет очень ограниченную ширину экрана.

Я нашел эту скрипку Рафаэль:

http://jsfiddle.net/vnTQT/

изменение размера достигается в примере с

paper.setViewBox(0,0,w,h,true); 
paper.setSize('100%', '100%'); 

Такое поведение является именно то, что мне нужно. Проблема: я использую paper.js в настоящее время и не хочу полностью переписывать свой компонент.

Есть ли способ сделать то же самое с paper.js?

+0

Вы могли бы попытаться описания того, что вы хотите, чтобы это произошло. Я не знаю о большинстве пользователей paperjs, но я вообще не знаю Рафаэля, поэтому я не понимаю, что делает setViewBox' неявно. – bmacnaughton

+0

Я хотел бы масштабировать элементы холста до заданного масштабирования или разрешения экрана. В качестве примера см. Скрипку. Смартфон в ландшафтном режиме имеет очень ограниченную ширину отображения, поэтому все рисованные элементы (пути и круги) должны масштабироваться относительно этой ширины. –

+0

Я запустил скрипку, но ничего не увидел. Я не знаю, почему. Вы говорите, что независимо от размера холста вы хотите, чтобы элементы дисплея были пропорциональны? Я понимаю это для разрешения экрана, но не увеличивает масштаб, подразумевая, что вы увеличиваете/уменьшаете элементы для увеличения/уменьшения масштаба? – bmacnaughton

ответ

0

Я не знаю, как сделать то, что вы хотите, с paperjs. Я реализовал ряд проектов, которые пропорционально изменяются при изменении размера холста, но я делаю это: 1) указание размера и положения каждого элемента как доли размера экрана и 2) перерисовку холста на событие изменения размера.

Если я хочу круг, чтобы поместить в центре холста с диаметром 10% от наименьшего размера холста:

var pos = paper.view.bounds.center; 
var size = 0.1 * Math.min(
        paper.view.size.width, 
        paper.view.size.height 
       ); 

var circle = new paper.Path.Circle({ 
    center: pos, 
    radius: size/2, 
    strokeColor: 'black', 
    strokeWidth: 1 
}); 

Вы можете изменить strokeWidth, а также. И вам придется перебирать/перерисовывать его каждый раз при изменении размера холста.

+0

Хорошо спасибо за ваш ответ, поэтому мне действительно нужно стереть/перерисовать все onresize? Будет ли такая операция стоить большой производительности? У вас есть опыт работы с мобильным телефоном? –

+0

Это не вызывает проблемы с производительностью. Рафаэль фактически делает то же самое за кулисами, потому что нет встроенной функции холста. Я использовал этот метод для относительно сложных проектов (см. Https://www.whale.ee/designs/palettenrolli) без заметных проблем. Конструкция (palettenrolli) полностью перерисовывается на событие изменения размера или изменение количества столбцов, но не на поворот цветов. – bmacnaughton

+0

Mobile - он отлично работает на моем Nexus 6, но я не тестировал его на других телефонах. Мой партнер по whale.ee запускает его на iPhone'ах и обнаруживает, что это тоже хорошо работает, но я не получаю обратной связи за пределами этого. – bmacnaughton