2015-12-07 2 views
1

Мне нужно установить fontFamily для всего объекта IText, даже если он имеет характерный стиль (пример кода и jsfiddle ниже). Обратите внимание, что при смене fontFamily стили конкретных персонажей не меняются. Есть ли способ для меня получить доступ и очистить эти стили, а затем применить стиль ко всему набору символов?fabricjs IText - Очистить характерные стили

http://jsfiddle.net/xmfw65qg/48/

var iTextSample = new fabric.IText('hello\nworld', { 
styles: { 
    0: { 
     0: { textDecoration: 'underline', fontSize: 80 }, 
     1: { textBackgroundColor: 'red' } 
    }, 
    1: { 
     0: { textBackgroundColor: 'rgba(0,255,0,0.5)' }, 
     4: { fontSize: 20 } 
    } 
    } 
}); 

ответ

1

http://jsfiddle.net/asturur/xmfw65qg/50/

приходится вручную перебирать объект стиля и очистить свойство FontFamily.

function setFont(name, value) { 
    var object = canvas.item(0); 
    if (!object) return; 
    if (object.styles) { 
    var styles = object.styles; 
    for (var row in styles) { 
     for (var char in styles[row]) { 
     if ('fontFamily' in styles[row][char]) { 
      delete styles[row][char]['fontFamily']; 
     } 
     } 
    } 
    } 

    object.set(name, value).setCoords(); 
    canvas.renderAll(); 
} 

Почему это необходимо, другое дело. Я бы открыл вопрос о репозитории github для этого.

Редактировать: Поскольку fabricjs выпущен 1.6.2, исправлена ​​небольшая ошибка, которая вызывала изменение исходного объекта стиля во время рендеринга.

+0

Отлично, спасибо @AndreaBogazzi – NelVision