![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Здравствуйте. У есть вот такая таблица
моя задача сделать столбцы этой таблицы перемещаемыми. Я вставил 3 вертикальных DIV-a, мне нужно написать код на JS, с помощью которого я мог бы мышкой схватить за этот DIV и таким образом изменить ширину столбца таблицы. Помогите мне пожалуйста написать такой обработчик. P.S: кстати почему-то в IE эти DIV-ы съезжают вправо, в остальных браузерах все ровно. |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Хм, интересная задачка…
Мне лень разбираться в вашем коде с тысячей ступенек, но вот, просто попробовал сделать таблицу с растягиваемыми в ширину столбцами. Может потребовать легкой доработки
Добавлено через 5 минут и 11 секунд Как-то туговато, правда, тягается, если растянуть таблицу на всю ширину окна. |
|||
|
||||
| dеluxe |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 4.8.2009 Репутация: 1 Всего: 2 |
Amphiluke, хм, прикольно) это работает!, js всемогущий в умелых руках
Это сообщение отредактировал(а) dеluxe - 26.8.2010, 21:45 |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, спасибо Вам большое, пример очень хороший. Подскажите пожалуйста вот что, когда мышкой хватаешь за границу и перетаскиваешь, то изменение ширины происходит моментально. А можно ли сделать как в Word, т.е ширина столбца меняется тогда, когда уже кнопку мыши отпускаешь?
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Наверное, примерно так:
|
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, да мне нужно так. Вы просто умница
Помогите пожалуйста сделать перетаскивание именно с помощью Div-ов. Вы очень класно все придумали. |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Правда, при таком resize начинает выделяться текст вслед за указателем мыши. В принципе это можно попробовать предотвратить, если на время перетаскивания накрыть таблицу прозрачным слоем с большим z-index.
Добавлено через 1 минуту и 11 секунд Ой, не увидел вашего предыдущего сообщения. |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, я очень Вас прошу покажите пожалуйста
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Ну, подождите… Это же несколько по-другому придется реализовывать.
|
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Вот пробный вариант. Еще можно посмотреть, доработать…
|
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, вот это супер, только вот еще бы кое что сделать. Почему-то перетаскивать с первого раза опять не получается, вроде навожу мышкой зажимаю левой кнопкой мыши, а она то не двигается, то когда кнопку мыши отпускаю и она все равно продолжает перемещаться. Можно ли как-то это исправить?
P.S: я заметил, что каждое второе перемещение приводит к такой ситуации. Это сообщение отредактировал(а) GrafF812 - 26.8.2010, 23:44 |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
В каком браузере?
Добавлено через 4 минуты и 5 секунд Блииииин! Какую фигню сделал... Надо так:
Но это между прочим. |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke,
в FF, в IE если ближе к левой границе хвататься, то все нормально, а если ближе к правой, то происходит такая ситуация. В GoogleChrome и Opera все идеально работает. т.е только в IE частично не работает и в FF всегда второй раз плохо перетаскивается. Добавлено через 4 минуты и 49 секунд GrafF812, после этого в IE заработало, а в FF по прежнему также Добавлено через 6 минут и 39 секунд Знаете что я заметил, в IE схватить за границу можно только у самых ее краев, слева и справа. По центру дива, курсор почему-то не меняется на col-resize. Добавлено через 7 минут и 37 секунд прошу прощения, все также осталось Это сообщение отредактировал(а) GrafF812 - 26.8.2010, 23:55 |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Поставьте фон splitter'ам какой-нибудь, кроме transparent. В общем, хватит пока. Четыре часа ночи (утра?). Потом (днем) еще попробую поразбираться, уж не обессудьте. -_- |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, спасибо Вам большое Вы мне очень сильно помогли.
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Оказывается, по-видимому, что таскание сплиттеров получалось не с первого раза из-за того, что событие mousemove сменялось в FF и IE событием drag! В Opera такое событие, кажется, не поддерживается, поэтому там работало нормально.
В общем, вот последний на текущий момент наиболее стабильный вариант со сплиттерами
Это сообщение отредактировал(а) Amphiluke - 27.8.2010, 09:24 |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, Вы просто умничка спасибо Вам огромное. еще если Вам не трудно, подскажите как сделать так, чтобы ширина самой таблицы оставалась фиксированной (например 700 px), а при изменении ширины столбцов, эта дельта изменения ширины столбца всегда изменяла последний столбец. И можно ли так сделать чтобы при изменении ширины столбца - текст ячейки переносился ниже строчкой (в этой же ячейки)?
Добавлено через 5 минут и 14 секунд Amphiluke, до Вас доходят мои приватные сообщения? Это сообщение отредактировал(а) GrafF812 - 27.8.2010, 11:33 |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
||||
|
||||
| Amphiluke |
|
||||||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Не понял. Какая дельта? Что получается, мы изменяем ширину, допустим, первого столбца, а в результате меняется ширина последнего?
Для этого в содержимом текста ячеек должны быть пробелы, по которым можно будет сделать перенос. Добавлено @ 11:58
И как это можно у таблицы фиксированной ширины изменять ширину последнего столбца, не меняя ширину других? Это сообщение отредактировал(а) Amphiluke - 27.8.2010, 12:01 |
||||||
|
|||||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
|
|||
|
||||
| Amphiluke |
|
||||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Вот заменить обработчик upHandler.
Добавлено через 46 секунд И, разумеется, ширину табличке дать
|
||||
|
|||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, да это именно то что мне нужно, только Вот знаете что я заметил, например если изменять ширину первого столбца, то все нормально, а если изменять ширину других столбцов, то при отпускании все предыдущие Div-ы перемещаются на небольшое расстояние 1-2 px, мне нужно чтобы они стояли не двигаясь. Вот попробуйте например потянуть за второй Div и перенести его скажем немного впрапво, после отпуская мыши первый див также сместиться немного вправо, таким образом ширина первой ячейки немного изменяется, а нужно чтобы он не менялся.
|
|||
|
||||
| Amphiluke |
|
||||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Ну так и вычесть эти два пикселя при позиционировании.
Вот, привожу состояние сценария на текущий момент.
|
||||
|
|||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, Вы знаете, все равно если перемещать 2, 3 или 4 DIV не важно вправо или влево, то первый DIV все равно смещается вправо
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Да это сама ячейка чуть-чуть расширяется, а div уже подстраиваеися под нее.
Короче, вот радикальный метод.
Добавлено через 1 минуту и 28 секунд Блин, проверил только в FF. В остальных, похоже, не катит. Добавлено через 3 минуты и 12 секунд Если бы таблица не пыталась сама подстроить размеры после каждого программного изменения ширины ячейки, было бы легче. Добавлено через 6 минут и 11 секунд FF возвращает вычисляемый стиль width нормально, в пикселях, а остальные — auto. Ррр. |
|||
|
||||
| GrafF812 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, а это как-то можно поправить?
Добавлено через 1 минуту и 43 секунды Amphiluke, а может поставить для таблицы какой-нибудь fixed стиль, если такой имеется? Добавлено через 5 минут и 9 секунд GrafF812, Вы знаете я для таблицы поставил стиль table-layout: fixed вроде теперь нормально, посмотрите пожалуйста как у Вас? Добавлено через 7 минут и 27 секунд Только есть одна особенность: в IE и наверное других все работает нормально, только при условии что Вы хотя бы один раз переместили первый DIV, в противном случае не работает.)))) В чем интересно дело? Добавлено через 10 минут и 55 секунд
Новое наблюдение, нужно переместить первый и последний, тогда все работает. Добавлено через 14 минут и 49 секунд
Ну в общем если все DIV-вы передергать тогда все точно работает. А может быть нужно ячейкам присваивать фиксированные размеры, а то видимо браузер их понимает после инициализации, когда мы перемещаем Div-ы. Попробуйте пожалуйста эту идею |
||||
|
|||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Методом бездумной подгонки можно подобрать значение поправки, чтобы работало как надо…
Без table-layout:fixed Добавлено через 1 минуту и 10 секунд |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
||||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Это вы разрешения спрашиваете? Можно. Разрешаю. Что это значит? Все атрибуты типа offsetWidth, clientWidth дают ширину ячейки, варьирующую относительно CSS атрибута width на 1—2px. Хз, как еще извратиться, чтобы обойтись без подгоночной поправки. Добавлено через 2 минуты и 46 секунд Хотел сделать через вычисляемый стиль, а везде, кроме FF выходит width: auto |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
||||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Вы правы.
Добавлено через 4 минуты и 36 секунд Это без table-layout. |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, Ур-а-а-а-а-а. Все просто СУПЕР, огромнейшее Вам спасибо.
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Вот. Выложу всё в одном месте, вдруг кому еще понадобится результат наших с вами изысканий.
Добавлено @ 14:49 Возможно, вместо background: none для div'ов стоит сделать повторяющийся background из прозрачного GIF-изображения 1x1 px. Это сообщение отредактировал(а) Amphiluke - 27.8.2010, 14:51 |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, Ур-а-а-а-а-а. Все просто СУПЕР, огромнейшее Вам спасибо.
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Я сделал, чтобы появлялась точечная рамка вокруг div'ов. Вы же, если хотите, можете вместо этого устанавливать перетаскиваемому div'у специальный background с изображением черной линии, а при отпускании мыши вновь устанавливать background: none.
|
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, Я Вас очень прошу покажите пожалуйста, у меня почему-то не получается DIV разместить ровно по середине границе самой таблицы.
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
А зачем вам сверхвысокая точность? Все равно область захвата границы должна быть достаточно широкой.
Попробуйте, увеличьте смещение
Добавлено через 1 минуту и 55 секунд Либо при старом смещении возьмите clientWidth вместо offsetWidth |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, о-о-о смещение, это мне и нужно было. Да кстати забыл спросить, когда хватаем за DIV, то его можно тянуть куда угодно, а можно ли сделать ограничение в пределах двух ячеек, между которых захватываемый DIV, вот на рисунке примерно нарисовал.
т.е чтобы перемещать границу DIV можно было бы не дальше этих границ. |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Сценарий разрастается (как и ваши аппетиты)
Добавлено через 2 минуты и 32 секунды Давайте уже сами начинайте подстраивать код под свои нужды. |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, супер, только я хотел чтобы при перемещении DIV останавливался за 10px до границе, а здесь он останавливается ровно на линии, извините если очень достаю Вам, но Вы просто все потрясающе делаете
Добавлено через 1 минуту и 58 секунд GrafF812, а можно ли сделать чтобы к левой и правой границе таблице также за 10 px нельзя было переместить? |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Ага. Так и пишите: «не хочу сам разбираться!». Тут буквально в двух местах подставить эти слагаемые в 10px. Вы не собираетесь вникать в код, который здесь для вас уж три страницы крутится?
|
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
GrafF812, а можно ли сделать чтобы к левой и правой границе таблице также за 10 px нельзя было переместить?
Добавлено через 4 минуты и 15 секунд
я просто плохо владею JS и хочу по Вашему примерчику разобраться как делать дальше самостоятельно, подскажите пожалуйста в какой функции Вы подставляете расстояние до DIV-ов, тут еще вот в чем дело, у Вас рассчитывается расстояние только до DIV-ов, а нужно еще учитывать границы самой таблицы. Сделайте пожалуйста, Вы мне очень помогли я Вам безумно благодарен, больше беспокоить не буду |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Вот здесь эти 10px.
Добавлено через 1 минуту и 33 секунды leftLim и rightLim соответственно левая и правая границы, за которые нельзя утащить сплиттер. |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
я просто плохо владею JS и хочу по Вашему примерчику разобраться как делать дальше самостоятельно, подскажите пожалуйста в какой функции Вы подставляете расстояние до DIV-ов, тут еще вот в чем дело, у Вас рассчитывается расстояние только до DIV-ов, а нужно еще учитывать границы самой таблицы. Сделайте пожалуйста, Вы мне очень помогли я Вам безумно благодарен, больше беспокоить не буду |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
У меня почему-то ваши сообщения двоятся…
Код я вам дал. Работает? |
|||
|
||||
| GrafF812 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 205 Регистрация: 3.12.2009 Репутация: нет Всего: нет |
Amphiluke, Спасибо Вам большое за все, Вам +1000000000
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |