Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   плагин для создания эффекта затемнения всей страницы кроме выбранного элемента DOM (https://javascript.ru/forum/project/52722-plagin-dlya-sozdaniya-ehffekta-zatemneniya-vsejj-stranicy-krome-vybrannogo-ehlementa-dom.html)

Deff 04.01.2015 15:40

Цитата:

Сообщение от Ruslan_xDD
Прикольно, но лучше на чистом JS + CSS3 сделать.

В принципе идея интересная, тут даже наверно css с параметрами анимации мон сделать чисто статическим, а вторым cоздаваемым и закидываемым на body элементом <style> лишь давать новые координаты обрамления. После отключения затемнения, последний <style> изымаем. Есть нюансы в задании анимации, чтобы элементы передвигались состыкованно.
И да, тогда реализация пофег на чём(js/jQ), ибо скорость и вариация анимации задаётся css
Думаю анимация через вектор, пример transform: translate(400px,-200px) ; http://habrahabr.ru/post/135816/

devote 04.01.2015 16:27

а чем CSS3 анимация не канает? http://learn.javascript.ru/play/4Ydgx

Deff 04.01.2015 16:40

devote,
Чот у мну во всех браузерах по разному (ХР)
Хорошо работает лишь в Хроме. В опере 12.16 - глючит. В Мозилле глючит на таблице
Про скролл - хорошо, ток оч лениво подгоняет(уравновешиваетс как лабораторные весы на микрограммах), раза в два побыстрей ба

ruslan_mart 04.01.2015 17:27

рони, я бы на твоём месте сделал все анимации на transition. Т.е., чтобы просто можно было менять свойства стилей и анимация сама происходила.

<!DOCTYPE HTML>
<html>
  
  <head>
    <style type="text/css">
      .transition {
        -moz-transition: all 2s;
        -ms--moz-transition: all 2s;
        -o-moz-transition: all 2s;
        -webkit-moz-transition: all 2s;
        transition: all 2s;
      }
    </style>
  </head>
  
  <body>
    <div id="test" style="border: 3px solid #000; left: 10px; height: 30px; position: fixed; top: 10px; width: 100px;"></div>
    
    <script type="text/javascript">
      var test = document.getElementById('test');
      test.classList.add('transition');
      test.clientHeight;
      test.style.left = '200px';
      test.style.top = '400px';
      test.style.width = '200px';
    </script>
  </body>

</html>

ruslan_mart 04.01.2015 17:34

devote, класс! :)

рони 04.01.2015 17:44

devote,
:victory:

devote 04.01.2015 17:54

Цитата:

Сообщение от Deff
Чот у мну во всех браузерах по разному (ХР)

ну дык понятно жешь, ведь сделано на коленях за 20 минут... Чего ты хотел) Естественно где-то нужно учесть префиксы, где-то события иные, например в сафари вместо события transitionend нужно слушать webkitTransitionEnd ну и т.д.

devote 04.01.2015 17:57

Цитата:

Сообщение от Deff
Про скролл - хорошо, ток оч лениво подгоняет(уравновешиваетс � как лабораторные весы на микрограммах), раза в два побыстрей ба

подкрути))) Помимо скролла кстати нужно еще и ресайз окна слушать)

Deff 04.01.2015 18:02

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

ruslan_mart 05.01.2015 05:50

devote, слушай, я вот только благодаря твоему примеру узнал о событии transitionend. :) До этого использовал setTimeout. Интересно узнать, не будет ли двойных срабатывания событий в каких-нибудь браузерах?
Например, если я так сделаю в своём коде:

node.eventAdd('transition|webkitTransitionEnd', function() {
    //
});


Есть вероятность, что он сработает два раза? Мало ли, вдруг в каких-нибудь новых вебкитах есть поддержка и просто transition, и webkitTransition.

P.S.: через ontransition вешать это событие можно? А то не хочется сейчас тестировать. :)


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