検索
ホームページウェブフロントエンドCSSチュートリアル基本的なJavaScriptでスクロールトリガーアニメーションを作成する方法

Webアニメーションの巧妙な使用は、ユーザーエクスペリエンスを向上させ、Webサイトの魅力を高めることができます。ただし、アニメーション要素がページの下にある場合、ユーザーはそれを見逃す可能性があります。この記事では、ネイティブJavaScriptを使用してスクロールトリガーアニメーションを実装する方法を紹介します。これにより、ユーザーが特定の要素にスクロールし、リソースの無駄を回避し、ユーザーエクスペリエンスを改善するときにのみアニメーションが再生されます。

基本的なJavaScriptでスクロールトリガーアニメーションを作成する方法

サードパーティライブラリに頼る必要はありません。ほんの少量のネイティブJavaScriptコードで達成できます。コアは、ターゲット要素がウィンドウに入るかどうかを効率的に検出できる交差点オブザーバーAPIを使用することにあります。

スクロールトリガーイベントを実装します

私たちのアプローチには以下が含まれます:

  1. scrollTrigger関数を作成して、特定の要素のスクロールトリガーイベントを処理します。
  2. 要素がウィンドウに入ったら、 .activeクラスを追加します。
  3. CSS .activeクラスを使用します。

さらに、要素が表示されている場合、特定のアクションを実行するためにカスタムコールバック関数をサポートする必要があります。

 scrolltrigger( '。ローダー'、{
  CB:function(el){
    el.innertext = 'loading ...'
    loadcontent()
  }
})

最後に、古いブラウザーによる交差点オブザーバーAPIの非サポートも扱います。

交差点オブザーバーAPI

交差点オブザーバーAPIを使用すると、ターゲット要素とウィンドウの交差点状態を非同期的に観察することができます。これは、スクロールイベントを聞くよりも効率的です。

スクロールトリガー関数を作成します

最初に、セレクターをパラメーターとして受信するscrollTrigger関数を作成します。

 function scrolltrigger(selector){
  let els = document.queryselectorall(selector);
  els = array.from(els);
  els.foreach(el => {
    addobserver(el);
  });
}
//サンプルScrolltrigger('。Scroll-Reveal ')を使用します。

次に、 addObserver関数を作成し、交差点オブザーバーを使用して要素を聴きます。

 function scrolltrigger(selector){
  let els = document.queryselectorall(selector);
  els = array.from(els);
  els.foreach(el => {
    addobserver(el);
  });
}
関数addobserver(el){
    let observer = new IntersectionObserver((エントリ、オブザーバー)=> {
      entries.foreach(entry => {
        if(entry.isinterSecting){
          entry.target.classlist.add( 'Active');
          Observer.unobserve(entry.target);
        }
      });
    });
  Observer.observe(el);
}
//サンプルScrolltrigger('。Scroll-Reveal ')を使用します。

上記のコードは、要素部分が表示されているときに.activeクラスを追加します。より細かい制御のために、交差点オブザーバーのoptionsパラメーターを使用できます。

 function scrolltrigger(selector、options = {}){
  let els = document.queryselectorall(selector);
  els = array.from(els);
  els.foreach(el => {
    addobserver(el、options);
  });
}
関数addobserver(el、option){
  let observer = new IntersectionObserver((エントリ、オブザーバー)=> {
    entries.foreach(entry => {
      if(entry.isinterSecting){
        entry.target.classlist.add( 'Active');
        Observer.unobserve(entry.target);
      }
    });
  }、options);
  Observer.observe(el);
}
// SCROLLTRIGGERの例を使用する('。Scroll-Reveal '、{
  rootmargin: '-200px'
});

今、私たちは最初の2つの目標を達成しました。次に、コールバック関数サポートを追加します:

 function scrolltrigger(selector、options = {}){
  let els = document.queryselectorall(selector);
  els = array.from(els);
  els.foreach(el => {
    addobserver(el、options);
  });
}
関数addobserver(el、option){
  let observer = new IntersectionObserver((エントリ、オブザーバー)=> {
    entries.foreach(entry => {
      if(entry.isinterSecting){
        if(options.cb){
          options.cb(el);
        } それ以外{
          entry.target.classlist.add( 'Active');
        }
        Observer.unobserve(entry.target);
      }
    });
  }、options);
  Observer.observe(el);
}
//サンプルScrolltrigger('。Loader '、{
  rootmargin: '-200px'、
  CB:function(el){
    el.innertext = 'loading ...';
    setimeout(()=> {
      el.innertext = 'タスクが完了しました! ';
    }、1000);
  }
});

最後に、レガシーブラウザの互換性に対処します。

 function scrolltrigger(selector、options = {}){
  let els = document.queryselectorall(selector);
  els = array.from(els);
  els.foreach(el => {
    addobserver(el、options);
  });
}
関数addobserver(el、option){
  if(!( 'intersectionobserver' in Window)){
    if(options.cb){
      options.cb(el);
    } それ以外{
      el.classlist.add( 'Active');
    }
    戻る;
  }
  let observer = new IntersectionObserver((エントリ、オブザーバー)=> {
    entries.foreach(entry => {
      if(entry.isinterSecting){
        if(options.cb){
          options.cb(el);
        } それ以外{
          entry.target.classlist.add( 'Active');
        }
        Observer.unobserve(entry.target);
      }
    });
  }、options);
  Observer.observe(el);
}
//サンプルScrolltrigger('。intro-text ');
scrolltrigger( '。スクロールreveal'、{
  rootmargin: '-200px'、
});
scrolltrigger( '。ローダー'、{
  rootmargin: '-200px'、
  CB:function(el){
    el.innertext = 'loading ...';
    setimeout(()=> {
      el.innertext = 'タスクが完了しました! ';
    }、1000);
  }
});

上記の手順を通じて、スクロールトリガーされたアニメーション効果を正常に達成し、ブラウザの互換性を考慮に入れました。 この記事があなたのウェブサイトのユーザーエクスペリエンスの向上に役立つことを願っています。

以上が基本的なJavaScriptでスクロールトリガーアニメーションを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
@keyframesや@mediaなど、 @rulesにはどの程度の特異性がありますか?@keyframesや@mediaなど、 @rulesにはどの程度の特異性がありますか?Apr 18, 2025 am 11:34 AM

先日、この質問がありました。私の最初の考えは、奇妙な質問です!特異性はセレクターに関するものであり、アットレールはセレクターではないので、...無関係ですか?

@mediaと@supportのクエリをネストできますか?@mediaと@supportのクエリをネストできますか?Apr 18, 2025 am 11:32 AM

はい、あなたはできます、そしてそれは本当にどの順序で重要ではありません。 CSSプリプロセッサは必要ありません。通常のCSSで動作します。

クイックガルプキャッシュバストクイックガルプキャッシュバストApr 18, 2025 am 11:23 AM

CSSやJavaScript(および画像とフォントなど)などのアセットにファーアウトキャッシュヘッダーを確実に設定する必要があります。それはブラウザを伝えます

CSSの品質と複雑さを監視するスタックを探してCSSの品質と複雑さを監視するスタックを探してApr 18, 2025 am 11:22 AM

多くの開発者は、CSSコードベースを維持する方法について書いていますが、そのコードベースの品質をどのように測定するかについて多くの人が書いていません。確かに、私たちは持っています

データリストは、値を強制せずに値を提案するためのものですデータリストは、値を強制せずに値を提案するためのものですApr 18, 2025 am 11:08 AM

短い任意のテキストを受け入れるために必要なフォームを持っていたことがありますか?名前などのように。それはまさにそのためのものです。たくさんあります

チューリッヒでのフロント会議チューリッヒでのフロント会議Apr 18, 2025 am 11:03 AM

私は、フロント会議のためにスイスのチューリッヒに向かうことにとても興奮しています(その名前とURLが大好きです!)。私はこれまでスイスに行ったことがないので、興奮しています

CloudFlareワーカーとのフルスタックサーバーレスアプリケーションを構築しますCloudFlareワーカーとのフルスタックサーバーレスアプリケーションを構築しますApr 18, 2025 am 10:58 AM

ソフトウェア開発における私のお気に入りの開発の1つは、サーバーレスの出現です。詳細に行き詰まる傾向がある開発者として

NUXTアプリケーションで動的ルートを作成しますNUXTアプリケーションで動的ルートを作成しますApr 18, 2025 am 10:53 AM

この投稿では、私が構築して展開して展開してネットライフを使用して、着信データの動的ルートを作成する方法を示すeコマースストアのデモを使用します。それはかなりです

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。