Как я могу достичь цели в KineticJS? Если я использую либо .getWidth()
, либо .getTextWidth()
методов объекта Text
, данная сумма представляет собой сумму ширины всех букв. Он не учитывает пробел между буквами. Таким образом, я не могу получить точную ширину отображаемого текста. Я видел, что есть решение, связанное с некоторым классом метрик экрана, но, возможно, есть более простой?Получение реальной ширины текста в пикселях
ответ
Не могли бы вы просто добавить скрытый элемент в тело и проверить его сгенерированную ширину?
С JQuery:
element = $('<span />').addClass('hide').text('some dummy text');
element.appendTo('body');
console.log(element.width());
Не уверен, что я понял вопрос хорошо, и не уверен, что это применимо к брезентовым элементам.
Afaik это для другого подхода. Можно работать с элементами DOM на холсте, но здесь я использую только холст-нарисованные ... поэтому этот метод не будет работать для чисто нарисованных элементов. Должен быть какой-то способ KineticJS или canvas per-pixel ... – noncom
Есть много способов сделать то, что вам нужно, но ...
Эта функция будет получить ширину текста в пикселях, используя холст
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);
}
Хмм, к сожалению, он дает тот же результат, что и метод '.getTextWidth()' экземпляра 'Text'. Что-то близкое к истинному, я получаю, если я делаю 'measure.width + text.length' вместо просто' measure.width', но все же даже это немного +/- 1 пиксель, неразумный здесь и там. Мой шрифт - Consolas 14, и я пытаюсь позиционировать позиционирование курсора в текстовом элементе ... К сожалению, точность вычислений оставляет желать лучшего ... может быть, у вас есть еще идеи? – noncom
Да, вы можете получить идеальный пиксель по цене исполнения. Нарисуйте текст на холсте, а затем измерьте, с которого X скопирует текст и перестает использовать context.getImageData(). Конечно, вы должны взвесить стоимость «совершенного» и «практического» для себя. – markE
Хех, вы имеете в виду использование техники scanline? : D. о, этот 21-й век, дай мне перерыв ..: D, ок, я думаю, это единственный способ, поэтому я стараюсь в ближайшее время, и когда это сработает, тогда это ответ. – noncom
не могли бы вы принести его, например, с jQuery с '$ ('') .text ('machin chouette'). width()'? –