Вы устанавливаете значение 10 каждый раз, сначала используйте значение split
:
else if (key.keyCode == 40){
mouse.style.top = parseInt(mouse.style.top.split("px")[0]) + 10 + "px";
}
Большинство каркасов GUI предоставляют какой-либо способ для вычисления текстовых метрик для шрифтов на заданных устройствах вывода.
Используя, например, java.awt.FontMetrics
, вы можете сделайте это:
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
public int measureText(Graphics g, String text) {
g.setFont(new Font("TimesRoman", Font.PLAIN, 12));
FontMetrics metrics = g.getFontMetrics();
return metrics.stringWidth(text);
}
Не проверено, но вы поняли идею.
В .Net вы можете использовать метод Graphics.MeasureString
. В C #:
private void MeasureStringMin(PaintEventArgs e)
{
// Set up string.
string measureString = "Measure String";
Font stringFont = new Font("Arial", 16);
// Measure string.
SizeF stringSize = new SizeF();
stringSize = e.Graphics.MeasureString(measureString, stringFont);
// Draw rectangle representing size of string.
e.Graphics.DrawRectangle(new Pen(Color.Red, 1), 0.0F, 0.0F, stringSize.Width, stringSize.Height);
// Draw string to screen.
e.Graphics.DrawString(measureString, stringFont, Brushes.Black, new PointF(0, 0));
}
You really have no way of knowing what browser, font settings, screen size etc the client is using. (OK, sometimes the request headers provide an indication, but really nothing consistent or reliable.)
So, I would:
I've generally found this "good enough", for example, for estimating the number of lines that some text will take up on a browser, in order to estimate how many adverts to show next to the text.
If it was really really crucial to you, then I can imagine a convoluted scheme whereby you initially send some Javascript to the client, which then takes a measurement and sends it back to your server, and you then use this information for future pages for that client. I can't imagine it's usually worth the effort, though.
Я думаю, вам следует выбрать одно из следующих решений:
Конечно, возможна некоторая смешанная оценка, но я думаю, что это слишком много усилий в неправильном направлении.
Для веб-приложения вы не можете (действительно) получить правильную оценку. Разные шрифты имеют разную ширину, так что это зависит не только от клиента (браузера) и его настроек масштабирования и DPI, но также от шрифтов, имеющихся на этом компьютере (и в операционной системе) или их замен.
Если вам нужен точный измеряя, создайте графический объект (растровое изображение, SVG, или даже какой-нибудь PDF-файл или что-то еще), который будет размещен на сервере, а не на клиенте.
Вы не можете (действительно) получить правильную оценку. Разные шрифты имеют разную ширину, так что это зависит не только от клиента (браузера) и его настроек масштабирования и DPI, но также от шрифтов, имеющихся на этом компьютере (и в операционной системе) или их замен.Если вам нужен точный измеряя, создайте графический объект (растровое изображение, SVG, или даже какой-нибудь PDF-файл или что-то еще), который будет размещен на сервере, а не на клиенте.
Вы не можете (действительно) получить правильную оценку. Разные шрифты имеют разную ширину, так что это зависит не только от клиента (браузера) и его настроек масштабирования и DPI, но также от шрифтов, имеющихся на этом компьютере (и в операционной системе) или их замен.Если вам нужен точный измеряя, создайте графический объект (растровое изображение, SVG, или даже какой-нибудь PDF-файл или что-то еще), который будет размещен на сервере, а не на клиенте.
Для хорошего * клиентского решения вы можете попробовать гибридный подход CSS-and-Javascript, как предложено в ответе RichieHindle на мой вопрос .
Учитывая, что Вы не знаете, каким шрифтом пользователь увидит страницу (они всегда могут переопределить ваш выбор, Ctrl- + страница и т. д.), «правильное» место для этого - браузер ... хотя браузеры этого не делают сделать это проще!
*
когда я говорю «приятно», я имею в виду «возможно, хорошо, но я еще не пробовал»
На самом деле это попытка встроить некоторые смарты в метод усечения строки [...]
Действительно ли это стоит усилий? У нас была именно эта проблема. И это было на разных языках. Решением было оставить все как есть. Сложность поддержания этого интеллекта быстро увеличивается (и, вероятно, экспоненциально) с каждым языком, для которого вы добавляете поддержку. Отсюда и наше решение.
[...] алгоритм для оценки и категоризации ширины текста (для шрифта переменной ширины) на основе его содержимого?
Большинство библиотек шрифтов предоставят вам эту информацию. Но это довольно низкоуровневые вещи. Основная идея - передать строку и вернуть ширину в точках.
Не существует надежного серверного решения для расчета ширины текста. (вне создания изображения текста и, возможно, SVG)
Если вы попробуете инструмент, подобный браузерным снимкам , и запустите его на сравнительно простых страницах, вы сразу поймете, почему. Трудно предсказать, насколько широкими окажутся даже самые обыденные примеры, намного меньше, если пользователь решит увеличить масштаб в браузере и т. д.
Точно не указано, что вы, возможно, захотите обрезать строку (это может быть полезно при поиске потенциальных решений), но наиболее распространенным является то, что вы хотите вырезать в какой-то момент отключите текст и создайте эллипс.
Это можно надежно сделать на многих платформах браузеров с помощью свойства css и NO javascript:
http: //www.jide. fr / emulate-text-overflowellipsis-in-firefox-with-css