マスクアニメーションのやり方
- 公開日:
- 更新日:
- 文字数:2057文字
https://designsupply-web.com/media/knowledgeside/5105/
html
<div class="mask_animation mask_wrap"> <div class="mask_inner"> <h4>test</h4> </div> </div>
css
$duration-time: 0.5s; $easing: ease; @mixin animation-settings { animation-duration: $duration-time; animation-timing-function: $easing; animation-delay: 0s; animation-iteration-count: 1; animation-direction: normal; animation-fill-mode: both; animation-play-state: running; -webkit-backface-visibility:hidden; backface-visibility:hidden; } @keyframes animate-panel { 0% { transform-origin: left top; transform: scale(0, 1); } 49% { transform-origin: left top; transform: scale(1, 1); } 50% { transform-origin: right top; transform: scale(1, 1); } 100% { transform-origin: right top; transform: scale(0, 1); } } @keyframes animate-content { 0% { visibility: hidden; } 49% { visibility: hidden; } 50% { visibility: visible; } 100% { visibility: visible; } } .mask_wrap { display: inline-block; .mask_inner { position: relative; visibility: hidden; &::after { content: ""; background: #000; width: 100%; height: 100%; position: absolute; left: 0; top: 0; transform-origin: left top; transform: scale(0, 1); transition: all 0.3s $easing 0s; visibility: visible; } &.start { animation-name: animate-content; @include animation-settings; &::after { animation-name: animate-panel; @include animation-settings; } } } }
js
$(function(){ $(window).scroll(function (){ $('.mask_animation').each(function(){ var targetElement = $(this).offset().top; var scroll = $(window).scrollTop(); var windowHeight = $(window).height(); if (scroll > targetElement - windowHeight + 200){ $(this).find('.mask_inner').addClass('start'); } }); }); });