![]() |
Модераторы: 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
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |