логин: 
<< предыдущая заметкаследующая заметка >>
14 марта 2010
Довел слегка до ума передвижение окон мышкой

Пожалуйста проверьте в разных браузерах и напишите. Окно двигается слегка рывками, но в итоге попадает туда, куда нужно — лучшего я добиться не смог, а это получилось достаточно просто. Можно двигать любое окно, хоть комментария, хоть вот такой тест.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
Страницы, которые привлекли мое внимание за последние дни, рекомендую:
2017-11-22 В июне 1982
архив ссылок
Оставить комментарий
Linux Firefox
1
0
Andrey Pozdnyakov
Вроде работает
Linux Firefox
 Москва
0
0
Слава Кришне! А то уже достало... :)
Окно опечатки исчезает при перетаскивании, его нельзя утащить далеко от выделенного текста...в принципе, это не такой и баг.
Linux Ubuntu Firefox
1
0
Andrey Pozdnyakov
Утащить можно далеко, а вот выделять текст в окне - не получается.
Windows Firefox
0
0
[email protected] (217888993625)
точно.
Linux Ubuntu Firefox
0
0
Andrey Pozdnyakov
Enter не работает в комменте.
При перемещении окна выделяется текст под ним. Но иногда нет. Устойчивого метода для невыделения текста я не нашёл.

Не рабочесть Entera не подтверждаю. Т.е. работает.

Крысой текст не выделить, да. А вот клавой вполне возможно.
Linux Ubuntu Firefox
0
0
Andrey Pozdnyakov
еуые

заработал!
Windows Safari Chrome
0
0
lleo.me/[email protected]Кубик
При резком движении курсора с зажатой левой(начиная с окна естественно) так чтобы обогнать окошко, после обгона выделить текст(на странице), отпустить левую кнопку мыши и вернуться к тому окошку, то оно прилипнет без нажимания клавиши.
Windows Opera
1
0
Прохожий (#36983)
В Opera 10.10 при перетаскивании выделяется текст в окне и под ним.

Иногда окно "убегает" из-под курсора: наводишь на него мышкой, а оно отскакивает в сторону.
Linux Opera
 Москва
0
0
Roman Erykalov
А в той же версии для линукса нет таких особенностей. Опера 10.10. Все ок.
Opera 10.10, сборка 4742, Linux, проблема таки есть.
Linux Opera
 Москва
0
0
Roman Erykalov
Ох, да. Недотестировал. А обновил движок - получил массу впечатлений. Самое неприятное, когда перетаскивание залипает на полосе прокрутки.
И конечно, удручает невозможность выделить слово или фразу в тексте. Приходится с шифтом извращаться. Пока больше минусов, к сожалению.
Linux Firefox
 Москва
0
0
Откатись обратно - кнопочка же есть.
Windows Firefox
0
0
lleo.me/[email protected] aka Mem0
У меня вообще здраво работает. Чуть медленнее чем окна в винде, но не критично.
Рывки начинаются при подходе к краям, когда часть окна вылезает за основной экран - начинаются рывки. Текст не выделяется, всё отлично.

p.s. а окно с комментом - рывками.
Windows Opera
0
0
gryzchick
Если курсор соскакивает с окна, то начинается беда.
По всей видимости, onmousedown надо ставить не на окно, а на window.
Windows Opera
0
0
*очередной комментарий про жквери*
Linux Firefox
0
0
lleo.me/[email protected]Артем Павлов
Чтобы текст во время перемещения не выделялся нужно сделать по onmousedown ondragstart = function() { return false } и onselectstart = function() { return false }, а по onmouseup сделать ondragstart = null и onselectstart = null
Linux Firefox
0
0
lleo.me/[email protected]Артем Павлов
Точнее, document.ondragstart = function() { return false } и document.body.onselectstart = function() { return false }
Linux Firefox
 Москва
0
0
Что-то без эффекта.
Windows Firefox
0
0
zencd (propir)
Работает. Но то что мышкой нельзя выделить текст - нехорошо. Да и курсор-перекрестие хорошо бы использовать чтобы намекнуть о возможности перетаскивания (а лишь во время перетаскивания такой курсор бесполезен).

Да и, в целом, смысл перетаскивания окошка комментария непонятен. Если его перетаскивают значит он мешает, так? Но координаты не запоминаются, ширину окна не поменять - по-моему болше вреда чем пользы (какой?) Я бы сделал как в жж - просто и текст не перекрывает.
Linux Firefox
0
0
lleo.me/[email protected]Артем Павлов
Протестировал во всех своих браузерах. Нормально заработало только в Файрфоксе. В Опере, Хромиуме и Конквероре при вылетании курсора за пределы окошка движение прекращается, в шестом Эксплорере вообще не заработало.
Хреново. Но лучше, чем ничего. Я, в свое время, забил.
Таскаться то оно (окошко), таскается. Но постоянно теряется. Раздражает жутко. Если Леонид сможет реализовать без багов - снимаю шляпу. Опера 10.10 Мастдай ХР. Нетбук. На других не пробовал.
Беру свот слова назад. Это неработоспособно.
Пытался отредактировать свой коммент - получид абсолютно бессмысеное перемещение, без воможности сохранить




Хреново. Но лучше, чем ничего. Я, в свое время, забил.
Таскаться то оно (окошко), таскается. Но постоянно теряется. Раздражает жутко. Если Леонид сможет реализовать без багов - снимаю шляпу. Опера 10.10 Мастдай ХР. Нетбук. На других не пробовал.
И глюки с копированием текста:

я писал:

Есть спецы? Упал сервер BSD. Упал по-страшному - умер винч. Бэкапа не делалось (последний раз год назад. Жена, дети. Есть шанс вытащить хоть что-то? Или ВСЕ?

А вставилось мое прошлое копи-паст.

PS спецы есть?
Windows Firefox
 Комсомольск-на-Амуре
0
0
умер винч?!- царство ему небесное!)))
Windows Firefox
0
0
Макс_1 (#3010)
ff3.6 - практически работает.
опера и хром - глючит, причем примерно одинаково: эффекты перетаскивания и выделения конкурируют и выделение в конце концов побеждает.
Windows Firefox
 Комсомольск-на-Амуре
0
0
Работает нормально, проверил в опере, FF, хром только в IE 6 не работает - не перемещается
Linux Ubuntu Firefox
0
0
Andrey Pozdnyakov
и все-таки - не очень.
Особенно неудобно редактировать заметки!
при попытке выделить слово - дергается окошко.

Как отключить?!
Linux Ubuntu Firefox
0
0
Andrey Pozdnyakov
ps: не туда напислал - нужна ссылка "оставить комментарий" в конце страницы тоже!
Windows
 Киев
0
0
Прикольно.
В целом работает (SeaMonkey).

Но если постараться, то
- прилипание получилось (выделить текст в окошке, нажать на выделение и попытаться его перетащить)
- испуганное окошко получилось (если открыть второе - инфо человека, его потаскать, то первое пугается и убегает от мышки :)
- окошко с инфой как-то тяжелее таскается и легче теряется.
Windows IE
0
0
sobomax (#4947)
IE 8 (8.0.6001.18702) не работает. При попытке тащить выскакивает JS error: Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; {FA784F2C-C4E8-F9E4-2ECE-0FDB44FC5F5C}; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; OfficeLiveConnector.1.3; OfficeLivePatch.0.0; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
Timestamp: Mon, 15 Mar 2010 08:14:08 UTC


Message: 'cursor' is null or not an object
Line: 328
Char: 56
Code: 0
URI: http://lleo.aha.ru/blog/2010/03/14.html
Windows Firefox
0
0
всё работает. то есть совсем всё ) правда, есть забавные эффекты, если зацепиться за границу окна, взять его кликом мышки и дёрнуть мышку в сторону от окна. после этого прикосновение мышки к окну с другой стороны телепортирует мышку туда же, где она была в начале описываемого действия. лечится повторным кликом на окне.
Windows Firefox
0
0
eka (#3576)
А я загнал окно за левый край и не могу вытащить.
Новое окно не видно. Видимо открывается тоже за краем.
Windows Firefox
0
0
[email protected] (217888993625)
двигается, даже если не хочешь. Мне как раз надо было скопировать из поля содержимое, а окно вместо этого уползает. Пришлось нажать ctrl-A
Windows Firefox
0
0
Ivan (#7022)
работает
только оно перетаскивается при захвате мышки за любое место окна, стало невозможно выделить мышкой текст в окне. то есть при быстром болтании мышкой туда-сюда получается, но это нетривиально.
Может исключить захват окна мышкой при попадании мышиного курсора в поле ввода?
Windows Safari Chrome
0
0
alexeybobkov
Глюк (хром):
Открываем окно. Печатаем многострочный текст, чтобы появился вертикальный скроллбар. Наводимся на скроллбар мышкой и двигаем его (напр. с целью проверки текста на ошибки). Теперь пытаемся отцепить прилипшее окно от мышки :) Мне удаётся только нажатием Esc. (Нечего и говорить, что редактируемый текст при этом теряется.)
Windows Safari Chrome
0
0
alexeybobkov
О! Научился отцепляться.
Надо нажать на кнопку мыши, в нажатом состоянии увести курсор со скроллбара в редактируемый текст (или вообще куда угодно, лишь бы всё ещё внутри окна), отпустить кнопку и, не двигая мышь (двинешь - окно опять прыгнет!), нажать кнопку мыши снова.
Windows Firefox
 Комсомольск-на-Амуре
1
0
Поражаюсь Вашим талантам - Леонид! Так искусно запрограммировать – это вить непросто окно, но ещё и увлекательная, онлайн-игра ” поймай меня и оставь комментарий”
Windows Safari Chrome
0
0
alexeybobkov
IE8:
Окно не таскается, текст не ресайзится, cancel в углу не работает, мышкой переставить курсор невозможно... короче, мышь вообще мертва.
P.S. Да, и при нажатии мышкой на send окно пропадает, но комментарий не появляется.
Поскольку иначе послать комментарий нельзя (при нажатии enter происходит перевод стороки в тексте), много комментариев об ошибках в IE8 вы вряд ли получите :). Я, как видите, комментирую из-под хрома.
P.P.S. Хотя, я смотрю, sobomax как-то всё-таки ухитрился откомментировать из-под IE...
Windows IE
0
0
alexeybobkov
Комментировать из-под IE всё-таки можно, главное - не делать резких движений...
При перетаскивании выделяется текст под окном и окно не двигается. Потом можно ткнуть мышкой в другое место и окно туда ползет.
В общем в опере движение херовое. Может косяк в опере так как и на работе под виндой в опере такой же результат.
Дома 10,10 сборка 4742. На работе 10,15
Mac Firefox
0
0
batc0h
Проблема как раз в рывках - пока курсор не дойдет до края, ничего не происходит, а потом окно вдруг резко прыгает, причем в разные стороны на разное расстояние. Как-то это нервирует. (FF 3.6, OsX 10.6.2)
Linux Firefox
 Москва
0
0
Боюсь, медицина в моем лице тут бессильна. Останется как есть, если какой-нибудь бог джаваскрипта не предложит что-то умнее. Но бога нет, значит останется как есть.
Маэстро, а можно я пожертвовую Вам процедуру окно-таскания?
Linux Firefox
 Москва
0
0
Ой, нужно!!! Буду дико благодарен!!!

Но только смогу ли я ее привинтить к существующей системе? Если это процедура передвижения квадратиков по экрану - такую я видел, она прекрасно работает, но только с квадратиками. Здесь же div трехуровневый вида {div}{div}{div}...{/div}{/div}{/div}, и внутри самого внутреннего могут располагаться всякие элементы типа textarea.
Вот рецепт локального счастья, проверенный в Опера10, ИЕ6, ИЕ8, FF3, Safari, Chrome.

1.После функции addEvent добавить следующее
function removeEvent(e,evType,fn){
if(e.removeEventListener) { e.removeEventListener(evType,fn,false); return true; }
else if (e.detachEvent) {e.detachEvent('on'+evType, fn)};
}

2.В функции helps заменить фрегмент между строчек из знаков равенства на :
// За тело не таскаем
var e_body=idd(id+'_body');
//Предыдущие координаты мыши
var hmov=false;
//Ищем Адама
var e=idd(id);
var pnt=e;
while(pnt.parentNode)pnt=pnt.parentNode;

var mmFunc=function(ev){
if(!ev)ev=window.event;
if(hmov) {
e.style.left = parseFloat(e.style.left)+ev.clientX-hmov.x+'px';
e.style.top = parseFloat(e.style.top)+ev.clientY-hmov.y+'px';
hmov={x:ev.clientX, y:ev.clientY};
if(ev.preventDefault)ev.preventDefault();
return false;
}
};
var muFunc=function(){
if(hmov){
hmov=false;
removeEvent(pnt,'mousemove',mmFunc);
removeEvent(pnt,'mouseup',muFunc);
e.style.cursor='auto';
}
};
addEvent(e,'mousedown', function(ev){
if(hmov)return;
if(!ev){
ev=window.event;
};
var lbtn=0;
//Если это ИЕ,то левая кнопка==1, а не 0
if(!window.addEventListener){
lbtn=1;
};
if(!ev.target)ev.target=ev.srcElement;
//Это была не левая кнопка или "тело" окна, ничего не делаем
if((lbtn!==ev.button))return;
var tgt=ev.target;
while(tgt){
if(tgt==e_body)return;
if(tgt==e)break;
tgt=tgt.parentNode;
};
//Начинаем перетаскивать
e.style.cursor='move';
hmov={x:ev.clientX, y:ev.clientY};
addEvent(pnt,'mousemove',mmFunc);
addEvent(pnt,'mouseup',muFunc);
if(ev.preventDefault)ev.preventDefault();
return false;
}
);

Таскать окно можно за "рамку" - элементы от id до id+'_body', исключая body (и всех его детей).
После того , как (и если) Леонид вставит код в страницу, прошу тестеров обратить особое внимание на возможность редактирования текста в textarea и возможность закрытия окна крестиком.
Linux Firefox
 Москва
0
0
Господи, вот оно! Он бог! Оно работает!!! Я не понимаю как, но оно работает! Главное теперь ничего не трогать. И я не понимаю, как вы смогли разобраться в моей собственной котовасии, я сам там с трудом уже копошусь!

Имя, как ваше имя, шоб благодарить в молитвах?
Рад, что смог помочь хорошему человеку. Могу пояснить физику и механику, если где непонятно. Ну не скромничайте, я же вижу - потрогали, но скрипту это на благо. Обращайтесь с катавасией, чем смогу - помогу.
Вы же атеист! Побойтесь бога!
Linux Firefox
 Москва
0
0
Клянусь всем святым, ничего не трогал!

Только поформатировал строчки чуть-чуть для большей читаемости, да в одном месте заменил var=;if на var=(?0:1). Ну и еще убрал else там, где if заканчивался return - в основном в addEvent().

Про физику мне спрашивать страшно, да и наверно не нужно. Я все-таки каждый раз надеюсь, что данный свыше код будет работать вечно, и вся дальнейшая жизнь будет сплошным безоблачным вызовом процедуры рисования окна helps().

Но про имя и адрес сайта я бы все-таки спросил, дабы внести в спасибы.
Кстати о читаемости. Это, конечно, движок блога, а не программистского форума, но за что же он табы порезал :-(

Вообще код не мешало-бы подравнять-подчистить. У меня создалось впечатление, что есть в нем излишества неиспользуемые. Хотя может это задел на будущее?

Дмитрий. Безлошадные мы пока... hkm.homeip.net
И еще одно из маленьких предложений. В таблице стилей заменить
.corners{position:relative;height:1%;background:url(/blog/design/pravka/popup_l.png) repeat-y;margin:9px 0;padding:1px 9px}
на

.corners{position:relative;height:1%;background:url(/blog/design/pravka/popup_l.png) repeat-y;margin:9px 0;padding:1px 9px; cursor:move}
.corners .inner .content{cursor:default}


А то не(оче(нь))видно, где же хватать, чтобы тащить.
Linux Firefox
 Москва
0
0
Ага, спасибо, исправил! Надо бы еще в дневнике...
Mac Firefox
0
0
batc0h
Хочу немного дополнить. Плавность движения сейчас зависит от того, насколько близко курсор находится к границе окна в момент нажатия кнопки и начала таскания. Например, если я берусь за верхний край, то вверх окно ползет почти плавно, а вниз - прыгает, видимо как раз на расстояние между исходной точкой, где была нажата кнопка, и нижним краем.
Может быть, если не сдвигать окно на это расстояние, а сделать небольшой фиксированный сдвиг, движение будет плавнее.
Теперь окно перестало таскаться. При нажатии клавиши мышки ничего не происходит, курсор в ладошку не превращается. FF, Safari - одинаково.

всего комментариев: 55

<< предыдущая заметка следующая заметка >>