【Javascript】お知らせを縦スクロールアニメーションで表示する・ニュースティッカーのサンプルプログラム

縦スクロールアニメーションで記事タイトル表示

サンプルプログラム

https://choppydays.com/static/newsticker/newsticker.php

HTML

<div class="news_area">
  <div id="news_ticker" class="news_ticker">
    <div class="news_ticker_inner">
      <div class="list">
        <article class="item">
          <p class="time">2021/4/1</p>
          <h3 class="title">
            タイトル1
          </h3>
        </article>
        <article class="item">
          <p class="time">2021/5/1</p>
          <h3 class="title">
            タイトル2
          </h3>
        </article>
        <article class="item">
          <p class="time">2021/6/1</p>
          <h3 class="title">
            タイトル3
          </h3>
        </article>
      </div>
    </div>
  </div>
</div>

ニュースティッカーとしてアニメーション表示する部分を<artcile>タグで囲みます。

CSS

  .time, .title {
    display: inline;
  }

  .news_ticker .news_ticker_inner {
    height: 30px;
    overflow: hidden;
    width: 400px;
    border: 1px solid #aaa;
  }

  .news_ticker .posts {
    padding: 0 0 0 38px;
    position: relative;
  }

  .news_area {
    border: 1px solid #333;
    padding: 10px;
  }

javascript(jQuery)

   $(document).ready(function () {
    NewsTicker.init();
  });

  var NewsTicker = ({
    init: function () {
      var self = this;
      self.newsTicker();
    },

    newsTicker: function () {
      var self = this;
      var $ticker = $('#news_ticker');

      /* アニメーション表示リスト */
      var $list = $ticker.find('.list');
      var $item = $ticker.find('.item');

      /* ループ表示用 clone */
      var clone = $item.eq(0).clone().addClass('is-clone');

      /* アニメーションの実行タイマー */
      var timer;
      var current = 1;

      /* 表示アイテム個数 */
      var length = $item.length;

      /* 表示アイテムの表示幅 */
      var distance = parseInt($item.css('height'), 10);

      /* 表示アイテム1個目をクローンしたものをリストに追加 */
      $list.append(clone);

      /* 表示アイテムを縦にスライドさせるアニメーション */
      function rotate() {
        $list.stop().animate({
            top: -distance * current,
          },
          1500,
          function () {
            if (current >= length) {
              current = 1;
              $list.css({
                top: 0
              });
            } else {
              current++;
            }
          });
      }

      /* タイマーセットメソッド autoPlay*/
      function autoPlay() {
        timer = setInterval(function () {
          rotate();
        }, 3500);
      }

      /* マウスイベントでタイマーON/OFF */
      $ticker.on({
        'mouseenter': function () {
          clearTimeout(timer);

        },
        'mouseleave': function () {
          autoPlay();
        }
      });

      autoPlay();
    }
  });

ニュース記事<article>はアニメーション表示させた際、最後の<article>の表示時に瞬時に先頭の<article>に切り替わるので、先頭の<article>をクローンし最後尾に追加しています。

      /* ループ表示用 clone */
      var clone = $item.eq(0).clone().addClass('is-clone');

      /* 表示アイテム1個目をクローンしたものをリストに追加 */
      $list.append(clone);

この記事のご感想やコメントはこちら

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