カラーミーショップにニュースティッカーを設置する
カラーミーショップにおいて、ヘッダー上に一行ニュースを表示する欄があるサイトをときどき見かけます。
簡単に更新できる作り方をしておくと、利便性が大幅アップします。
今回は、長文テキストをニュースとして流したい要望があったので、プラグインを入れて、自前でコードを追加して作り込んでみました。
サンプルコードを書きましたので、参考にどうぞ。
AcmeTicker
ニュースティッカーのjQueryプラグインは、いくつか種類があります。
デモを見て、自分のサイトに合いそうなものを選びます。
今回は、画面にはみ出るくらいの長文テキストを右から左へ流したい、という要望があったので、AcmeTickerを設置しました。このプラグインは長文を流すのに向いています。
jsファイルは下記サイトからダウンロードして、手持ちのサーバーにアップロードして使います。
公式)https://github.com/codersantosh/acmeticker
AcmeTickerの動作形式
AcmeTickerの動作は、以下の4種類あります。挙動はデモサイトを参考にどうぞ。
Marqueeを選ぶと、テキストが横方向に流れます。
- Vertical
- Horizontal
- Marquee
- Typewriter
AcmeTickerのオプション
流れる速度、流れる方向、フォーカス時ホバー時に動作を止めるか、などのオプションがあります。
機能はシンプルなので、設置も難しくないです。
- type : (string) vertical/horizontal/marquee/typewriter
- autoplay: ( number ) Recommended : For vertical/horizontal 4000, For typewriter 2000, marquee doesnot take this option
- speed: ( number ) Recommended : For vertical/horizontal 600, For typewriter 50, For marquee 0.05
- direction: ( string ) Recommended : For vertical up/down, For horizontal/marquee right/left
- pauseOnFocus: ( boolean )
- pauseOnHover: ( boolean )
- controls : Set of selectors for prev, next and toggle button
controls: {
prev: /Can be used for vertical/horizontal/typewriter//not work for marquee/
next: '',/Can be used for vertical/horizontal/typewriter//not work for marquee/
toggle: ''/Can be used for vertical/horizontal/marquee/typewriter/
}
設置する一行ニュースティッカーの概要
カラーミーショップを使う場合は更新しやすいように、管理画面内にテキストを入力してそれを表示するように作ります。使えそうな欄は以下の通りです。
- 「店長一言メモ」欄が全ページで表示可能な欄です。
- 「お知らせ」「フリースペース」欄はトップページのみ表示可能な欄です。
ニュースティッカーを全ページで表示したい場合は「店長一言メモ」欄を使うのがよいです。
サンプルコード
テキストを流し始めるまでの待機時間を3秒設けています。
読み込み直後、すぐにテキストが流れると読みにくいためです。
テキストと表示エリアの横幅の長さを調べて、テキスト>表示エリアの横幅の場合、流れるようになっています。
ブラウザ幅を広げたり狭めたりすることで、動作したり止めたりします(リサイズ時の処理)。
表示したい場所に(HTML)
<!-- tickerプラグイン -->
<script src="https://your-domain.jp/js/acmeticker/acmeticker.js"></script>
<!-- News Ticker -->
<{if $manager_memo != ""}>
<div class="l-ticker">
<div class="l-ticker-box u-container">
<div class="l-ticker-box__inner">
<ul class="js-acme-ticker">
<li><{$manager_memo}></li>
</ul>
</div>
</div>
</div>
<{/if}>
JavaScript
<script>
var abox = $('.l-ticker-box__inner');
var atext = $('.l-ticker-text');
var acontent = abox.html();
var tscroll = 0;
var outer;
/*ロード時*/
$(function () {
outer = atext.outerWidth();
ticker();
});
/*リサイズ時の処理*/
$(window).on('resize', function () {
outer = atext.outerWidth();
if(abox.width() < outer) {
if(tscroll == 0) {
tscroll = 1;
ticker();
}
} else {
if(tscroll == 1) {
tscroll = 0;
abox.html(acontent);
} else {
if(outer <= 0) {
atext = $('.l-ticker-text');
outer = atext.outerWidth();
}
}
}
});
function ticker() {
if(abox.width() < outer) {
window.setTimeout(function(){
$('.js-acme-ticker').AcmeTicker({
type:'marquee',
direction: 'left',
speed: 0.08, //スクロール速度
});
}, 3000); //スクロール前の停止時間
}
}
</script>
CSS
.l-ticker {
background: var(--bg-ticker-color);
color: #fff;
font-size: 12px;
font-weight: 500;
line-height: 1;
letter-spacing: 0.02em;
box-sizing: border-box;
width: 100%;
height: 34px;
}
.l-ticker a, .l-ticker a:hover {
color: #fff;
}
.l-ticker-box__inner {
overflow: hidden;
}
.l-ticker-box__inner li {
text-align: center;
padding: 11px 0;
}
.acmeticker-wrap {
height: 34px;
}
.l-ticker-text {
white-space: nowrap; /*重要*/
}
おわりに
ヘッダー上に一行表示する場合は、スクロール時に隠れたり、出てきたりという挙動を求められることがあります(よくある挙動なので、他サイトで見たことがあるかもしれません)。
ヘッダーをposition: sticky;することでうまくいく場合もありますし、サイトのメニュー機能次第では崩れることもよくあります。
崩れる場合はJavaScriptで対応する必要が出てくるので、完璧を目指すと、この作り込みがかなり手間になります(ある程度かんたんに設置できる仕様をお願いすることになります)。
執筆者
えいじ@naeco.jp この記事を書いた人
自作するのが好きですぐに試したくなる、凝り性なWebエンジニア。
カラーミーショップ、モールなどのECについて記事にしています。
ご相談・お問い合わせはこちら