|
|
|
| Что я делаю не так?
Я задаю ширину элемента с помощбю JS:
if (L <= bwidth - 200 && L >= 300) //L - это позиция разделителя, точка отсчета.
{
wleft = ((L - 1) / bwidth) * 100; // превращаю пикселы в проценты
wleft = wleft.toFixed(3); // 3 после запятой. А сколько вообще можно?
wright = 100 - wleft; // для правого блока
d.getElementById ('lefter').style.width = wleft + '%';
d.getElementById ('righter').style.width = wright + '%';
}
|
И всё выглядит натуралистично в ИЕ, Мозилле и Хроме, но не в Опере.
Тут если я задаю ширину всё же настоящими пикселями (что для поставленной задачи недопустимо), отображается корректно. А с процентами - при перемещении разделителя (мышью) левый блок (id=lefter) "отскакивает" примерно на 1 процент ширины.
Скрипт в работе: http://mumm-36.narod.ru/chru/
Где ошибка, кто подскажет? | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2009 в 01:30)
| | Во-первых, второе значение (для ширины правого дива) вы получаете не "с точностью до 3-х знаков".
Разберите пример и, надеюсь, поймёте:
<script>
var pi = Math.PI;
var bad = 10 - pi.toFixed (3); //Сколько знаков после запятой? Неужели три?
var good = (10 - pi).toFixed (3); //А вот здесь точно ТРИ знака.
//Посмотрите в алерте.
alert (bad + '\n' + good);
</script>
|
Во-вторых:
>"если я задаю ширину всё же настоящими пикселями (что для поставленной задачи недопустимо)"
Наоборот, для этой задачи задание ширины в процентах является недопустимым.
Вы вполне можете дать ширине значение в процентах с ЛЮБЫМ количеством знаков после запятой.
Но браузер перед отображением всё-равно переводит ваши проценты в пиксели.
Причём правила округления у браузеров разные. У Opera - всегда по типу Math.floor (), т.е. выдаст он на выходе наименьшее целое пикселов для каждого из дивов.
Отсюда вы практически всегда будете "терять" один, а иногда даже два пиксела (в сумме для ширин обоих дивов).
Задача ваша решается в режиме реального времени при движении нажатой мыши.
Т.е. изменение размеров окна по ширине в процессе работы скрипта произойти не может в принципе - нечем пользователю "цепляться" за край окна (или нажимать кнопки "Свернуть/Развернуть"), ведь мышь его занята.
Вам надо вычислить точное значение ширин обоих дивов в пикселах перед началом движения (СУММА), затем получить ЦЕЛОЕ значение ширины для левого дива в пикселах (ЛЕФТЕР), затем отнять этот ЛЕФТЕР от СУММЫ и получить ЦЕЛОЕ значение ширины для правого дива в пикселах. | |
|
|
|
|
|
|
|
для: АЯ
(18.10.2009 в 02:48)
| | Когда значение дано в пихелях, при изменении размеров окна браузера получается неприятный эффект - размер дивов же фиксируется, и они радостно разъезжаются. Это если сначала пошевелить сплиттер, а потом подергать окно. Именно поэтому я стал запариваться с процентажом.
Теперь же полагаю просто округлять положение сплиттера до целого процента, специально для разного рода опер... ( | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2009 в 03:35)
| | >"полагаю просто округлять положение сплиттера до целого процента"
Полагаю, что не поможет.
Пусть получите 30% и 70% - оба целых.
Положим, клиентская ширина окна в пикселях - 1017.
В целых пикселях браузер OPERA получит - 305 и 711.
Складываем и получаем один потерянный пиксель.
Видимо, вам надо делать всё же в пикселях, и дополнительно "вешать" на окно функцию на событие onresize для "подгонки". | |
|
|
|
|
|
|
|
для: АЯ
(18.10.2009 в 07:47)
| | >Полагаю, что не поможет.
практика показывает, что помогло. сплиттер двигается мелкими рывками, особенно заметно на широком мониторе, зато ширина всегда остается гибкой.
см. | |
|
|
|