|
28 / 24 / 10
Регистрация: 26.04.2015
Сообщений: 307
|
|||||||||||||||||||||
GetBoundingClientRect() не всегда срабатывает как нужно22.01.2019, 15:35. Показов 4172. Ответов 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 не всегда срабатывает
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|