Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отменить перетаскивание картинки Canvas, в Google Chrome 
:(
    Опции темы
kuksha
Дата 25.5.2013, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Здравствуйте.
Делаю карту звёздного неба (ещё раз большое спасибо всем, кто помог полтора года назад в разработке!)
В последних сборках Google Chrome появилась неприятность: при перетаскивании карты нажатой левой кнопкой мыши, делается выделение картинки (карта синеет, как рисунок отмеченный для перетаскивания). Карта в итоге перетаскивается, но после отпускания кнопки она синеет и это здорово мешает работе. Приходится щёлкать по ней снова, чтобы убрать выделение.
Кстати, при перетаскивании карты на малые расстояния(10-20 точек) выделение картинки не происходит.
Как отменить это безобразие? 
В Opera и FireFox этого нет - перетаскивание по прежнему нормально работает. 
В Хроме заметил это примерно неделю назад, раньше не было.
Ссылка: http://info-7.ru/Astro/nebo_segodnya_geo.php

Добавлено через 12 минут и 15 секунд
Да, забыл написать: пробовал сделать перевод фокуса на другой объект при отпускании мыши - выделение картинки в итоге пропадает, но в процессе перетаскивания она всё равно остаётся синей...

Это сообщение отредактировал(а) kuksha - 25.5.2013, 22:04
PM MAIL   Вверх
Arantir
Дата 25.5.2013, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Попробуйте
Код

$('canvas').on('dragstart', function(event){
    event.preventDefault();
});



--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
kuksha
Дата 26.5.2013, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Arantir, спасибо, видимо это то, что надо. 
Но, к своему стыду, не могу осилить ваш ответ -  редко пишу на JS и никогда не использовал такие конструкции... поэтому не понимаю где в моём коде это использовать.

Попробовал сделать так:
Код

canv.ondragstart = function(event) 
{
    event.preventDefault();
}

не помогло...

На всякий случай: 
http://info-7.ru/Astro/draw_map.js
Работа с мышью в канвасе - строка 1439
PM MAIL   Вверх
ksnk
Дата 26.5.2013, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Есть более другое решение
Код

<canvas unselectable="on" ... >

и в стили добавить такую магию
Код

*[unselectable=on] {
    -moz-user-select: none;
    -o-user-select:none;
    -khtml-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    user-select: none;
}


unselectable="on" - это фиренная фича от IE. А остальные броузеры будут разбираться со стилями и собственными фенечками. 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
kuksha
Дата 26.5.2013, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



ksnk, спасибо, только что это попробовал в черновике:
http://info-7.ru/Astro/nebo_segodnya_geo85.php
(грузится пока долго, секунд 10)
В Хроме получилось интересно - картинка синим действительно не выделяется, но при повторном перетаскивании картинка перетягивается вслед за мышью как выделенная. Если после перетаскивания щёлкнуть мышью, то всё нормально, но пользователям это не объяснишь...

Способ Arantir-а бы попробовать, но не понимаю как...

Это сообщение отредактировал(а) kuksha - 26.5.2013, 11:28
PM MAIL   Вверх
ksnk
Дата 26.5.2013, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Там на карте стили цепляются 2 раза. В шапке и в body . Это, конечно не криминально, но вызывает определенные сложности при отладке стилей ;)

Я не смог воспроизвести описываемое в моем Хроме. "Отметить" картинку не получилось.

canv.dragstart нужно заменить на canv.ondragstart, иначе в этом коде совсем не будет никакого смысла.

Эффекты несколько необычны. На перетаскивание левой кнопкой иногда не реагирует никак. Зато на перетасквание центральной и правой - реагирует. А вот потом уже и левой таскается нормально. Надо будет в скриптах поковырятся...

Добавлено @ 12:39
Насколько я понимаю, "перетаскивание" сейчас реализовано как последовательное перерисовывание canvas'а? Тут могут встретится драконы.  smile Событий "перемещения мышки" валится конкретно много и дергать по каждому событию перерисовку не гуманно. Над эти тоже нужно подумать.

Это сообщение отредактировал(а) ksnk - 26.5.2013, 12:39


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 26.5.2013, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



1901 строка drawMap95.js
Код

ObjInfo.style.display='none';

заменить на 
Код

if(ObjInfo && ObjInfo.style) ObjInfo.style.display='none';

иначе ошибки валятся. 

P.S. Ошибки валятся если елозить мышкой до окончания прорисовки карты на старте.

Добавлено @ 13:06
В момент "перетаскивания" нужно отключать "стандартный" механизм вывода информации об объектах. Он мешает.

Это сообщение отредактировал(а) ksnk - 26.5.2013, 13:12


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
kuksha
Дата 26.5.2013, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Отлично, спасибо!

В итоге перетаскивание и выделение исчезли после комбинации двух предложенных тут способов:
внесения изменений в стили как описано у ksnk + внесение куска кода "canv.ondragstart = function(event)..." точно как написано у меня в третьем сообщении темы. (ondragstart - спасибо, очипатка smile ) 
Поотдельности это не работало.

Насчёт ошибок связанных с ObjInfo.style.display='none' - да, согласен, что отключать правильнее... Сделал как Вы сказали. 
Правда, я никогда не видел ошибок при елозании мышки до прорисовки карты - где они проявлялись? Хоть порадоваться, что сейчас их там не будет smile

Добавлено через 5 минут и 14 секунд
кстати, насчёт Хрома у Вас - странно, что не видели выделения... возможно потому, что перетаскивали вдоль осей X и Y - попробуйте для интереса протащить по диагонали из угла в угол по ссылке из первого топика темы.
PM MAIL   Вверх
Arantir
Дата 26.5.2013, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Цитата(kuksha @  26.5.2013,  08:54 Найти цитируемый пост)
поэтому не понимаю где в моём коде это использовать.

У Вас на сайте подключен jQuery. Вы ведь не для красоты его подключали?
Мой код — это использование функций jQuery, http://api.jquery.com/on/ . Как бы они не выглядели — это обычный синтаксис Javascript.
$ - это функция. Принимает селектор, возвращает найденные элементы. on - это тоже функция. Ей задаются 2 аргумента: имя ивента и функция для выполнения по этому ивенту. Ничего сверхъестественного.

Вы можете вставить его в любом месте, но после создания canvas (например, после body).

Добавлено через 4 минуты и 21 секунду
Цитата(kuksha @  26.5.2013,  12:53 Найти цитируемый пост)
кстати, насчёт Хрома у Вас - странно, что не видели выделения... возможно потому, что перетаскивали вдоль осей X и Y - попробуйте для интереса протащить по диагонали из угла в угол по ссылке из первого топика темы. 

Я тоже выделения (синего) не видел. Перетаскивал в самых разных направлениях. Версия хрома последняя.

Добавлено через 6 минут и 54 секунды
Цитата(kuksha @  26.5.2013,  12:53 Найти цитируемый пост)
равда, я никогда не видел ошибок при елозании мышки до прорисовки карты - где они проявлялись?

Ctrl+Alt+J 

Это сообщение отредактировал(а) Arantir - 26.5.2013, 14:06

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  Снимок.PNG 72,54 Kb


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
kuksha
Дата 26.5.2013, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Понял, я вразные места вставлял - не срабатывало... на досуге покопаюсь.

Насчёт того, что синего никто не видел - во дела  smile ... а у меня на двух разных машинах глючит... WinXP+Chrome(автоообновляемый).
Ну да ладно - с этими заплатками надёжнее будет, вдруг не я один такой  smile 
PM MAIL   Вверх
ksnk
Дата 26.5.2013, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(kuksha @  26.5.2013,  13:53 Найти цитируемый пост)
Правда, я никогда не видел ошибок при елозании мышки до прорисовки карты - где они проявлялись?

Нажать на F5 и елозить по черному кругу. Ошибки валятся (валились smile ) в консоль в Хроме.

Перетаскивание можно сделать пореактивнее. На начало перетаскивания можно выводить дополнительный канвас, в который копировать всю инфорацию из первого. Сделать этот второй элемент полупрозрачным, разместить поверх настоящего и двигать его вместе с мышкой.
Придется обрамить canvas div'ом с overflow:hidden и position:relative. 

При слишком далёком "драге" изображение может уехать за экран, но так, imho, все равно лучше, чем ничего не показывать. По отпускани мышки - скрыть-удалить дополнительный канвас и перерисовать основной.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Arantir
Дата 26.5.2013, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Цитата(kuksha @  26.5.2013,  13:13 Найти цитируемый пост)
Насчёт того, что синего никто не видел

Выделения-то я не видел, но после первого перетаскивания картинка больше не перетаскивалась. При перетаскивании курсор превращался в зачеркнутый кружок. А preventDefault для ивента dragstart эту проблему решает.
Ну, в любом случае, я в JS-консоли это код на Вашем же сайте пробовал и он рабочий.

Цитата(kuksha @  26.5.2013,  13:13 Найти цитируемый пост)
Понял, я вразные места вставлял - не срабатывало... на досуге покопаюсь.

Просто вставьте сразу перед тем, где в canvas начинается рисование карты. Судя по всему это "Canva.init('karta')" в конце старницы. Кстати за пределами <html> не должно ничего быть. Скрипты в конце страницы надо помещать в конец самого <body>.

Это сообщение отредактировал(а) Arantir - 26.5.2013, 14:25


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
kuksha
Дата 26.5.2013, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



В общем я уже написал, как всё решилось в этом черновике:
http://info-7.ru/Astro/nebo_segodnya_geo85.php

Но, всё-же интересно добить вариант Arantir-а.
Arantir, сделал так, как смог понять ваши рекомендации:
http://info-7.ru/Astro/nebo_segodnya_geo23.php - не работает...
вставил в скрипт в конце файла и перенёс этот скрипт выше вклейки файла "подвал", чтобы внутрь "body" попасть (хотя и без этого переноса всё работает, может браузеры устраняют эту ошибку... я не спорю с переносом, но смутно помню, что полтора года назад я с этим возился-матерился и в итоге заработало именно так, как стоит сейчас, то есть с ошибкой, когда скрипт стоит в самом конце, после "html"... что было и почему так оставлено, уже не могу вспомнить... ладно - вопрос не в этом, а в том, как ваш вариант запустить правильно)

Добавлено @ 19:26


Цитата(ksnk @  26.5.2013,  12:32 Найти цитируемый пост)
Насколько я понимаю, "перетаскивание" сейчас реализовано как последовательное перерисовывание canvas'а?

Эм... вроде нет... перерисовывать ВЕСЬ канвас было бы слишком накладно... При перемещении постоянно сканируется массив координат и если он не пуст, то генерится всплывающее окно с информацией об объекте, который оказался под мышкой - может это сбивает с толку... 
или это я только так думаю, а на деле канвас весь перерисовывается?.. кошмар, если так..
Отдельное спасибо за идею с полупрозрачностью - обязательно попробую!

Это сообщение отредактировал(а) kuksha - 26.5.2013, 19:28
PM MAIL   Вверх
Arantir
Дата 26.5.2013, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 5
Всего: 55



Цитата(kuksha @  26.5.2013,  18:14 Найти цитируемый пост)
Arantir, сделал так, как смог понять ваши рекомендации:
http://info-7.ru/Astro/nebo_segodnya_geo23.php - не работает...

Ну почему же. Теперь картинка перетаскивается без проблем, а не зависает после первого перетаскивания. То, что и ожидалось. На canvas ивент есть, значит код правильно прописан.

А вот синей картинка у меня никогда не становилась, наверное по-этому мне трудно воспринять всю суть проблемы.
Насколько я понял, синий оверлей — это "user selection". От него должно помочь то, что посоветовал ksnk.
Правда я не уверен на счет селектора с unselectable. Браузеры обычно умеют понимать абсолютно любые, даже не документированные, атрибуты (их можно и в селекторах и через JavaScript читать). Но для полной уверенности попробуйте задать стиль самому canvas:
Код

canvas {
    -moz-user-select: none;
    -o-user-select:none;
    -khtml-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

 

Это сообщение отредактировал(а) Arantir - 26.5.2013, 19:28


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
kuksha
Дата 26.5.2013, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 154
Регистрация: 15.6.2011

Репутация: нет
Всего: нет



Упс... правда ваша, Arantir... Теперь и у меня 23-й вариант работает. Видимо меня "синева" с толку сбила - поправил css...
В общем, насколько я понял, оба варианта делают одно и то же разными способами.


PM MAIL   Вверх
ksnk
Дата 26.5.2013, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(kuksha @  26.5.2013,  19:14 Найти цитируемый пост)
 а на деле канвас весь перерисовывается?.. кошмар, если так..

Нет, это я что-то напутал. Перерисовка идет один раз.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.