Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Действие при изменении стиля (https://javascript.ru/forum/misc/80817-dejjstvie-pri-izmenenii-stilya.html)

voraa 07.08.2020 15:24

Цитата:

Сообщение от laimas
в отладчике то все они прекрасно видны.

Нет гарантии, что удастся пройти по всем веткам кода, где есть
element.style.xxx = 'yyy'

laimas 07.08.2020 15:31

voraa,
ну в общем-то в отладчике можно просмотреть и все события у элементов (ну или почти все, в FF это сразу видно), а визуально видя, какой элемент такой стиль получает, можно его выделить и узнать все, включая и тех кто что-то изменил.
У меня просто сложилось впечатление, что вообще неизвестно есть ли такое на странице, ибо спрашиваю что и где, а в ответ ....

voraa 07.08.2020 15:35

У меня сложилось впечатление, что есть страница, сделанная кем-то, css и скрипты, написанные кем-то, и надо просто дополнительно что то сделать с элементом(тами), когда по какой то причине меняется их размер.
resizeObserver не повесить, т.к. размер (видимый) меняется и при трансформации, а он на это не реагирует.

laimas 07.08.2020 15:39

Цитата:

Сообщение от voraa
У меня сложилось впечатление, что есть страница, сделанная кем-то, css и скрипты

Согласен, может быть и так, но тогда так и нужно было ответить, а то "часть кода есть, вот тут знаю, а далее черная дыра".

Diox 07.08.2020 18:58

Цитата:

Сообщение от voraa (Сообщение 527694)
Может попробовать window.requestAnimationFrame задействовать.

Раз написал:
Цитата:

А вот как мне сделать, чтобы функция работала если в div блоке slick-track изменяется стиль
Два написал:
Цитата:

Вопрос же именно в этом - Что отвечает за изменение стиля
Даже пояснил:
Цитата:

Я для этого и привел пример, что window.onresize - определяет, были ли изменения в размерах окнах и если были - тогда исполняет функцию.

Мне же нужно: определить, были ли изменения в стиле блока slick-track и если были - то произвести функцию.
Ещё раз объяснил вопрос:
Цитата:

Ещё раз: стиль у блока задается произвольно, он зависит от других параметров, других скриптов, мне нужно только определить, были эти изменения или нет - не важно какие изменения (хотя и пример уже дал).
Вы же отвечаете зачем-то про окно и анимацию...

Цитата:

Сообщение от laimas (Сообщение 527693)
Здрастье, приехали. Кто же вам тогда ответит, чего надо?

Если вот это window.onresize = function(event) { ... изменит на вызов именованной функции, то ее можно будет вызывать из чего угодно. Допустим, пусть имя функции этой "a". То есть в событии изменения окна вызывается она.

Ещё один гений, просто гений, вопрос вообще не про окна. Это пример того, как простой строчкой учитываются изменения.

Цитата:

Сообщение от laimas (Сообщение 527693)
Но сам то стиль по своему хотению не изменится

Я не знаю уже как объяснять, то ли я не по русски пишу, то ли читать не умеете...

Цитата:

Ещё раз: стиль у блока задается произвольно, он зависит от других параметров, других скриптов, мне нужно только определить, были эти изменения или нет - не важно какие изменения (хотя и пример уже дал).

Diox 07.08.2020 19:05

Цитата:

Сообщение от voraa (Сообщение 527717)
У меня сложилось впечатление, что есть страница, сделанная кем-то, css и скрипты, написанные кем-то, и надо просто дополнительно что то сделать с элементом(тами), когда по какой то причине меняется их размер.
resizeObserver не повесить, т.к. размер (видимый) меняется и при трансформации, а он на это не реагирует.

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

Соответственно скрипт должен выглядеть так:

Узнать, произошли ли перемены в блоке 1, если да - то: {
закрытие акардиона (скрипт есть)
}


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

laimas 07.08.2020 19:15

Цитата:

Сообщение от Diox
Ещё один гений

А вам, гению, ну вроде бы уже говорили о других возможностях, как то отследить анимацию, уж коли о ней речь была, собственно вы можно следить и за изменениями на странице, это MutationObserver.

Diox 07.08.2020 19:17

Изначально даже указал, какой стиль в основном меняется
transform: translate3d(-1746px, 0px, 0px);


Он может стать с -1746px и -1747px и 46px - по этому фиксированные данные не подходят, нужно просто "стиль изменился" и каждый раз при изменении, чтоб новый скрипт срабатывал

laimas 07.08.2020 19:26

Diox,
я ведь не спорю, что не меняется, и вам говорили, что можно и отследить. В то же время, ведь сам то по себе он не изменится, есть то, что инициализирует это, а значит там и можно что-то выполнить. Но коли это никак по каким-то причинам, следите за изменением узла посредством MutationObserver и выполняйте в этом событии.

voraa 07.08.2020 19:48

Цитата:

Сообщение от Diox
Сообщение от voraa
Может попробовать window.requestAnimationFrame задействовать.
Раз написал:
Цитата:
А вот как мне сделать, чтобы функция работала если в div блоке slick-track изменяется стиль
Два написал:
Цитата:
Вопрос же именно в этом - Что отвечает за изменение стиля

Запоминаете, какие из интересующих вас стилей были у elem

const teststyle = () => {
// Тут проверяем не изменились ли стили у elem,
// Если изменились, делаем то, что нужно
// И перезапоминаем изменения
window.requestAnimationFrame (teststyle)
}
teststyle();

Цитата:

Сообщение от Diox
нужно просто "стиль изменился" и каждый раз при изменении, чтоб новый скрипт срабатывал

Вас любой стиль интересует?
Тогда только MutationObserver

Кстати, еще и class могут поменять


Часовой пояс GMT +3, время: 23:03.