JavaScript10(サイト作成(2))

1:テキストアニメーションの実装

テキストアニメーションで作成したmain.js・_mixin.scss・scroll-polyfill.js_・scroll.js・style.scss・text-animation.jsをこのように配置する。

貼り付けたmain.js内の以下を切り取り

scripts/main.jsにこのように貼り付け

貼り付けた_mixinはいらなかったので削除する。

style.scssの記述を変更

.animate-title,
.tween-animate-title {
  opacity: 0;
 
  &.inview {
    opacity: 1;

  & .char {
    display: inline-block;
}
}

  & .char {
    opacity: 0;
}
}

.animate-title.inview .char {
@include animation(
$name: kf-animate-chars,
$duration: 0.5s,
$timing-function: cubic-bezier(0.39, 1.57, 0.58, 1),
$fill-mode: both
);

@for $i from 1 through 30 {
&:nth-child(#{$i}) {
animation-delay: $i * 0.04s;
}
}
}

@keyframes kf-animate-chars {
  0% {
    opacity: 0;
    transform: translateY(-50%);
}

  100% {
    opacity: 1;
    transform: translateY(0);
}
}

変更したstyle.scss・_text-animation.scssにリネームしてmodulesに移動

以前使用したTweenMax.min.jsをコピーしてvendorsに貼り付け

index.htmlに記述して読み込ませる

アニメーションされるか動作テストをする

index.htmlに以下の記述を追加

main.jsの記述を変更

document.addEventListener('DOMContentLoaded', function () {
// newでインスタンス化
  const hero = new HeroSlider('.swiper-container');
  hero.start();

// コールバック関数を設ける
  const cb = function (el, isIntersecting) {
    if (isIntersecting) {
      const ta = new TweenTextAnimation(el);
    ta.animate();
}
};

// 第1引数にエレメント第二引数にコールバック関数
  const so = new ScrollObserver(".animate-title", cb);
// 動作テスト用
  const so2 = new ScrollObserver(".tween-animate-title", cb);
});

文字がアニメーションされていればOK

 

2:スライダーアニメーションの実装

スクロールの監視とスライダーアニメーションのところのstyle.scss.cover-slideより上を削除して、modulesに配置して_image-slide.scssにリネーム

_base.scssに記述を追加

img {
  max-width: 100%;
  vertical-align: bottom;
}

style.scssに記述を追加 @import ‘modules/image-slide’;

@import ‘modules/button’;

index.htmlに以下を記述して確認すると

スライダーアニメーションが追加された!

3:ボタンの実装

_button.scssをmodulesに配置する。中はこの様になっている

.btn {
position: relative;
display: inline-block;
background-color: $cWhite;
border: 1px solid $cBlack;
font-weight: 600;
padding: 10px 40px;
margin: 10px auto;
cursor: pointer;
transition: all 0.3s;
color: $cBlack;
text-decoration: none !important;

&.float:hover {
background-color: $cBlack;
color: $cWhite;
box-shadow: 5px 5px 10px 0 rgba(0, 0, 0, 0.5);
}

&.filled {
background-color: $cBlack;
color: $cWhite;
box-shadow: 5px 5px 10px 0 rgba(0, 0, 0, 0.5);

&:hover {
background-color: $cWhite;
color: $cBlack;
box-shadow: none;
}
}

&.letter-spacing:hover {
background-color: $cBlack;
letter-spacing: 3px;
color: $cWhite;
}

&.shadow {
box-shadow: none;

&:hover {
transform: translate(-2.5px, -2.5px);
box-shadow: 5px 5px 0 0 $cBlack;
}
}

&.solid {
box-shadow: 2px 2px 0 0 $cBlack;
border-radius: 7px;

&:hover {
transform: translate(2px, 2px);
box-shadow: none;
}
}

&.slide-bg {
position: relative;
overflow: hidden;
z-index: 1;

&::before {
content: "";
display: inline-block;
width: 100%;
height: 100%;
background-color: $cBlack;
position: absolute;
top: 0;
left: 0;
transform: translateX(-100%);
transition: transform 0.3s;
z-index: -1;
}

&:hover {
color: $cWhite;

&::before {
transform: none;
}
}
}
&.cover-3d {
position: relative;
z-index: 1;
transform-style: preserve-3d;
perspective: 300px;

& span {
display: inline-block;
transform: translateZ(20px);
}

&::before {
content: "";
display: inline-block;
width: 100%;
height: 100%;
background-color: $cBlack;
position: absolute;
top: 0;
left: 0;
transform: rotateX(90deg);
transition: all 0.3s;
transform-origin: top center;
opacity: 0;
}

&:hover {
color: $cWhite;

&::before {
transform: none;
opacity: 1;
}
}
}
}


.btn-cubic {
position: relative;
display: inline-block;
transform-style: preserve-3d;
perspective: 300px;
width: 150px;
height: 50px;
margin: 0 auto;
cursor: pointer;
font-weight: 600;

& span {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 1px solid $cBlack;
line-height: 48px;
text-align: center;
transition: all 0.3s;
transform-origin: center center -25px;
color: black;

}

& .hovering {
background-color: $cBlack;
color: $cWhite;
transform: rotateX(90deg);
}

& .default {
background-color: $cWhite;
color: $cBlack;
transform: rotateX(0);
}

&:hover {
& .hovering {
transform: rotateX(0);
}
& .default {
  transform: rotateX(-90deg);
  }
 }
}

index.htmlにボタンを追加する

ボタンが生成されているのを確認する(一部おかしいのは後で修正)

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です