Сразу к делу. Есть задача, связанная с перетаскиванием прямоугольников. Как бы дроп, но не простой.
Условия:
Допустим подводим мышку к самому верхнему прямоугольнику, номер 1. Жмём и не отпуская мышь, ведём прямоугольник чётко вниз (движение вверх пока не пашет), не сворачивая)). Если делать это медленно, то во-время прохождения нашего прямоугольника над нижними, они как и должны поднимаются вверх, как бы освобождая пространство для нашего перетаскиваемого объекта. Это мне удалось.
Но проблема в следующем. Когда делаешь это быстро (опускаешь мышь, держа "номер 1"), то некоторые прямоугольники не расходятся, потому что видимо тупо не успевают сообразить, что к чему (т.к. походу интервал ещё не успел запустить один, а мы уже около другого), и алгоритм даёт сбои.
Алгоритм:
На данный момент остановился на самом лучшем, который смог придумать. В общем у каждого кирпича есть свойство kirpich.top = 52, где 52 - это его верхний отступ от верхнего края самого контейнера с кирпичами.
В общем по событию mousemove, во время захвата и движения нашего кирпича (т.е. походу один раз в пиксель) срабатывает такой код. Он означает, что цикл обходит все кирпичи и определяет самый последний, верхний, перед нашим, который мы тащим. Вот его то мы отправляем в фунцию, которая сетИнтервалом его наверх двигает.
var top = 0; for(var i = 0; i < bricks.length; i++){ if(elementActiveTop - wrapTop > bricks[i].brick.top && !bricks[i].brick.flugOuter){
p.s. Пока интересует движение только вниз. Вверх я хочу потом сделать по аналогии. И остальной код к делу не относится, он чисто для перетаскивания и функцией для передвижения кирпичей, которой пофиг на всё, она просто ждёт кирпич в качестве аргумента.
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
Здравствуйте, подскажите какой тег использовать для увеличения значения, пример на картинке.
Вроде, про такой тег я слышала. Если есть тег прогресс бар, значит и такое должно быть.
Question
psywalker
Всем привет!
Сразу к делу. Есть задача, связанная с перетаскиванием прямоугольников. Как бы дроп, но не простой.
Условия:
Допустим подводим мышку к самому верхнему прямоугольнику, номер 1. Жмём и не отпуская мышь, ведём прямоугольник чётко вниз (движение вверх пока не пашет), не сворачивая)). Если делать это медленно, то во-время прохождения нашего прямоугольника над нижними, они как и должны поднимаются вверх, как бы освобождая пространство для нашего перетаскиваемого объекта. Это мне удалось.
Но проблема в следующем. Когда делаешь это быстро (опускаешь мышь, держа "номер 1"), то некоторые прямоугольники не расходятся, потому что видимо тупо не успевают сообразить, что к чему (т.к. походу интервал ещё не успел запустить один, а мы уже около другого), и алгоритм даёт сбои.
Алгоритм:
На данный момент остановился на самом лучшем, который смог придумать. В общем у каждого кирпича есть свойство kirpich.top = 52, где 52 - это его верхний отступ от верхнего края самого контейнера с кирпичами.
В общем по событию mousemove, во время захвата и движения нашего кирпича (т.е. походу один раз в пиксель) срабатывает такой код. Он означает, что цикл обходит все кирпичи и определяет самый последний, верхний, перед нашим, который мы тащим. Вот его то мы отправляем в фунцию, которая сетИнтервалом его наверх двигает.
Задача:
Нужно придумать чёткий, качественный алгоритм, который позволит задаче выполнить свои условия на 100% и при быстром перетаскивании не будет тупить.
Перепробовал уже многое, как только не придумывал, но все идеи приходилось сворачивать и бросать в урну.
Ссылка на пример
p.s. Пока интересует движение только вниз. Вверх я хочу потом сделать по аналогии. И остальной код к делу не относится, он чисто для перетаскивания и функцией для передвижения кирпичей, которой пофиг на всё, она просто ждёт кирпич в качестве аргумента.
Link to comment
Share on other sites
10 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.