2013-06-24 3 views
0

Как я могу достичь цели в KineticJS? Если я использую либо .getWidth(), либо .getTextWidth() методов объекта Text, данная сумма представляет собой сумму ширины всех букв. Он не учитывает пробел между буквами. Таким образом, я не могу получить точную ширину отображаемого текста. Я видел, что есть решение, связанное с некоторым классом метрик экрана, но, возможно, есть более простой?Получение реальной ширины текста в пикселях

+0

не могли бы вы принести его, например, с jQuery с '$ ('') .text ('machin chouette'). width()'? –

ответ

1

Не могли бы вы просто добавить скрытый элемент в тело и проверить его сгенерированную ширину?

С JQuery:

element = $('<span />').addClass('hide').text('some dummy text'); 
element.appendTo('body'); 
console.log(element.width()); 

Не уверен, что я понял вопрос хорошо, и не уверен, что это применимо к брезентовым элементам.

+0

Afaik это для другого подхода. Можно работать с элементами DOM на холсте, но здесь я использую только холст-нарисованные ... поэтому этот метод не будет работать для чисто нарисованных элементов. Должен быть какой-то способ KineticJS или canvas per-pixel ... – noncom

2

Есть много способов сделать то, что вам нужно, но ...

Эта функция будет получить ширину текста в пикселях, используя холст

function getTextWidth(font,text){ 
    var canvas=document.createElement(“canvas”); 
    var ctx=canvas.getContext(“2d”); 
    ctx.font=font; // for example “14pt Verdana”; 
    var measure=ctx.measureText(text); 
    return(measure.width); 
} 
+0

Хмм, к сожалению, он дает тот же результат, что и метод '.getTextWidth()' экземпляра 'Text'. Что-то близкое к истинному, я получаю, если я делаю 'measure.width + text.length' вместо просто' measure.width', но все же даже это немного +/- 1 пиксель, неразумный здесь и там. Мой шрифт - Consolas 14, и я пытаюсь позиционировать позиционирование курсора в текстовом элементе ... К сожалению, точность вычислений оставляет желать лучшего ... может быть, у вас есть еще идеи? – noncom

+0

Да, вы можете получить идеальный пиксель по цене исполнения. Нарисуйте текст на холсте, а затем измерьте, с которого X скопирует текст и перестает использовать context.getImageData(). Конечно, вы должны взвесить стоимость «совершенного» и «практического» для себя. – markE

+0

Хех, вы имеете в виду использование техники scanline? : D. о, этот 21-й век, дай мне перерыв ..: D, ок, я думаю, это единственный способ, поэтому я стараюсь в ближайшее время, и когда это сработает, тогда это ответ. – noncom