|
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
|
|||||||||||||||||||||
GetBoundingClientRect() не всегда срабатывает как нужно22.01.2019, 15:35. Показов 4198. Ответов 6
Доброго времени суток!
Возникла проблема следующего характера: На html страничке есть div с id="tiles":
SelectDiv.js
Однако я заметил поведение, что указанное мною ограничение срабатывает не каждый раз, - в результате tiles вылазит за пределы экрана. Помогите найти где ошибка и почему так получается? Дополнительный вопрос по описанному выше коду: каждое нажатие стрелочек на клаве двигает tiles на размер его ширины (на 64px) с добавлением плавности в css (transition: .5s .Но, если нажать стрелку и не отпускать - событие onkeydown будет повторяться несколько раз, tiles что логично, тоже будет двигаться на столько размеров своей ширины, сколько произошло событий onkeydown. Вот только та плавность, которая присуща одному нажатию клавиши пропадает, и tiles слишком быстро улетает в сторону движения. Как заставить этот div плавно обрабатывать все события onkeydown? p.s.: также буду признателен, за любые комментарии по поводу косяков в коде и вариантов их улучшения, т.к. я весьма слабо разбираюсь в js, но постараюсь всё понять и впитать инфу!
0
|
|||||||||||||||||||||
| 22.01.2019, 15:35 | |
|
Ответы с готовыми решениями:
6
.onclick не всегда срабатывает Не всегда срабатывает функция
|
|
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
|
||||||
| 22.01.2019, 18:03 | ||||||
|
Wolver,
Либо замените window.onkeydown на window.onkeyup в файле MoveDiv.js вот так (8 строка)
0
|
||||||
|
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
|
|||
| 22.01.2019, 18:16 [ТС] | |||
|
0
|
|||
|
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
|
|||||||||||||||||||||||||||||||
| 23.01.2019, 03:07 | |||||||||||||||||||||||||||||||
Сообщение было отмечено Wolver как решение
Решение
Wolver, позже скину вам пример, вам нужно код немного подкорректировать.
Добавлено через 2 часа 9 минут Wolver, Примерно так -> https://codepen.io/Mr_Sergo/pen/gqbbMp
Вникайте в пример и вам станет ясно как нужно сделать в вашем коде. Можете попробовать во время нажатия стрелок изменить размер окна браузера что бы удостовериться что картинка не заезжает и не не доезжает до правого края браузера. Добавлено через 4 часа 19 минут ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ Wolver, Вот получше код -> https://codepen.io/Mr_Sergo/pen/zexKaM
Вниз и вверх по тому же принципу
0
|
|||||||||||||||||||||||||||||||
|
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
|
||||||||||||||||
| 23.01.2019, 19:40 | ||||||||||||||||
|
Wolver,
Если нужно, вот код с движением во всех направлениях -> https://codepen.io/Mr_Sergo/pen/bzddWa
1
|
||||||||||||||||
|
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
|
||
| 23.01.2019, 23:57 [ТС] | ||
|
Кстати, только за одно использование котеек на background div'a в вашем примере - заслуживаете жирный лайк, т.к. я обожаю котэ! >< Код превосходно работает, я отдебажил js-скрипт в хроме, адаптировал под свои нужды, заменив window.innerWidth и window.innerHeight на параметры внешнего дива с id="inner", чтобы мой tiles двигался лишь в inner'e, а не окне, но не суть) Главное, за код вам также огромное спс! Единственное что странно почему transition влияет на поведение GetBoundingClientRect() - в вашем коде вы его не используете, в моём коде эта ф-ция как вы правильно заметили в одном из комментов глючит именно из-за transition. Я пришёл к выводу, что transition не успевает завершиться, в то время как обработчик ловит новое событие onkeydown (т.к. кнопку не отпустили или нажали за меньшее время от прошлого нажатия (срабатывания onkeydown) чем transition: .5s. В результате ф-ция возвращает дробные значения (просматривал вот сейчас дебагом с выводом в консоль), сбиваясь подсчётом, и именно из-за этого div и залазит за границы экрана... (см. вложение) Разве не должны пришедшие события от клавы оседать в буффере и ждать своей очереди обработки? ----------------- И ещё, подскажите пожалуйста, я так понимаю, чтобы добиться решения моего дополнительного вопроса в шапке топика - мне нужно писать обработчик, который будет принудительно изменять время обработки событий клавиатуры? Я вот по гуглу нашёл напр. вот такой в статейке: а именно вот этот код в песочнице: http://jsfiddle.net/BxbAG/ (хотя в нём тоже есть свои недостатки, напр если onkeydown от одной и той же кнопки клавы поступит больше чем указанное время изменения обработки событий клавы - сработает только 1 раз, но в то же время длительное удерживание кнопки делает нужный пользовательский интервал их обработки)
0
|
||
|
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
|
||
| 24.01.2019, 01:44 | ||
![]() Когда до края остается совсем немного 10px-20px , не суть, немного - меньше чем указано при нажатии на стрелку (в моем случае, последнем, это '100') скрипт начинает плюсовать полагаясь на текущие координаты не дождавшись завершения движения картинки. Представим что у нас transition стоит 10s и до края осталось немного. Скрипт говорит браузеру двигай картинку, картинка начала движение и пошел отсчет 10сек. , в этот промежуток времени скрипт снова говорит двигай картинку так как полагаясь на текущие координаты он понимает что край еще не настал, и браузер выполняет его команду --- примерно таким образом и получается что картинка уезжает за край, лекарство :использовать переменную которая изменяется МОМЕНТАЛЬНО а не в течении 10 секунд, в моем случае это moveLEFT- отвечает за перемещение по горизонтали и moveTOP- отвечает за перемещение по вертикали. Добавлено через 6 минут Проще говоря вы используете плавно меняющуюся переменную getBoundingClientRect() --- потому что она плавно (в течении 0.5s) меняет свое значение Как-то так
1
|
||
| 24.01.2019, 01:44 | |
|
Помогаю со студенческими работами здесь
7
Не всегда срабатывает ajax метод Скрипт не срабатывает как нужно 404 не всегда срабатывает
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType и SDL3_ttf из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|