JavaScript

bespoke.jsを使ってプレゼン用パネルイメージを表示

技術の進化とともに、プレゼンテーションの方法も大きく変わってきました。かつてはパワーポイント一択だったプレゼンも、今では多様なツールを使って視覚的に魅力的で、よりインタラクティブな発表が可能です。その中でも、特に注目されているのが「bespoke.js」というライブラリです。このブログ記事では、bespoke.jsを使って紙芝居的に見せるパネルイメージの作り方をご紹介します。これを使うことで、プレゼンがよりダイナミックで視覚的にインパクトのあるものになるでしょう。特に、エンジニアやデザイナーが手軽に使えるように、ステップごとに解説していきます。

bespoke.jsとは

まず、bespoke.jsとは何かについて簡単に説明しましょう。bespoke.jsは、軽量なJavaScriptのスライド作成ライブラリで、モジュール化された構造を持っているため、拡張性が高く、さまざまなカスタマイズが可能です。プレゼンテーションツールとしてはもちろん、さまざまなWebプロジェクトでの視覚的表現にも利用できます。従来のパワーポイントやGoogleスライドとは異なり、コードベースでカスタマイズできるので、柔軟性があり、自分のブランドやデザインに合わせたプレゼンを作成することができます。

具体的には、スライドの切り替えやアニメーション効果、パネルのテーマ変更などが可能で、全体的に非常に軽量なライブラリなので、パフォーマンスにも優れています。

bespoke.jsを使うメリット

ここで、bespoke.jsを使うメリットについてさらに深掘りしてみましょう。

  1. 軽量性と拡張性
    他のプレゼンテーションツールと比べ、bespoke.jsは非常に軽量です。基本的な機能を備えつつ、必要に応じてプラグインを追加できるため、シンプルなものから複雑なものまで対応できます。
  2. オープンソースで自由にカスタマイズ可能
    bespoke.jsはオープンソースであるため、自由にソースコードをカスタマイズできます。自分の用途に合わせて、プレゼンのデザインや動作を自由に変更できるのは大きな魅力です。
  3. モジュールベースの構造
    bespoke.jsはモジュールベースで作られているため、必要な機能だけを取り入れられます。例えば、スライドのアニメーションだけを使いたい場合や、特定のテーマだけを適用したい場合など、カスタマイズの自由度が非常に高いです。
  4. クロスプラットフォーム対応
    パソコン、タブレット、スマートフォンなど、どのデバイスでも表示可能です。また、ブラウザ依存の問題も少なく、主要なブラウザに対応しているため、どんな環境でも安定して動作します。

プレゼン用パネルイメージを表示するCSSの記述例

それでは、実際にプレゼンテーション用のパネルを作成するためのCSSの基本的な記述例を紹介します。ここでのCSSは、見栄えを整えるためのスタイル指定です。プレゼンをより魅力的に見せるためには、フォントや色、レイアウトにも工夫が必要です。

<style>
body{
	font-family:Verdana,"Hiragino Kaku Gothic Pro","ヒラギノ角ゴ Pro W6",Osaka,"MS Pゴシック",Arial,sans-serif;
	padding: 0;
	margin: 0;
}
h1{
	font-size:55px;
	line-height:1.4em;
	text-align:center;
	font-weight:normal;
}
section{
	font-size:60px;
	text-align:center;
	padding-top:25px;
	color:#FFF;
}
</style>

上記のコードは、ベースとなるページ全体のスタイルを定義しています。特にプレゼンテーション用のパネルは、テキストが見やすく、視覚的にわかりやすいようにスタイルを整えることが重要です。シンプルかつモダンなデザインを心がけましょう。

プレゼン用パネルイメージを表示するHTMLの記述例

続いて、HTMLの記述例です。bodyタグにデフォルトテーマとしてclass=”coverflow”を設定し、articleタグ内に複数のsectionタグを用意して、スライドを表現します。このHTML構造が、スライドプレゼンの基盤となります。

<body class="coverflow">

    <h1>キーボードの「←」「→」でパネルが左右に移動します。<br/>
    「↑」「↓」でテーマが変わります。</h1>

<article>
<section>1</section>
<section>2</section>
<section>3</section>
<section>4</section>
<section>5</section>
<section>6</section>
<section>7</section>
<section>8</section>
<section>9</section>
<section>10</section>
<section>11</section>
<section>12</section>
<section>13</section>
<section>14</section>
<section>15</section>
<section>16</section>
<section>17</section>
<section>18</section>
<section>19</section>
<section>20</section>
<section>21</section>
<section>22</section>
<section>23</section>
<section>24</section>
<section>25</section>
<section>26</section>
<section>27</section>
<section>28</section>
<section>29</section>
<section>30</section>
</article>

<script src="bespoke.js"></script>
<script src="demo.js"></script>
</body>

このHTMLは、bespoke.jsがスライドを制御し、ユーザーがキーボードの矢印キーを使ってスライドを操作できるように設定されています。特に「←」「→」キーでスライドを切り替え、「↑」「↓」キーでテーマを変更できる仕組みが組み込まれています。

bespoke.jsを使ってプレゼンで紙芝居的に見せるためのJavaScriptの記述例

次に、bespoke.jsを使って、プレゼンの動作をJavaScriptで制御するための記述例を紹介します。

bespoke.js、demo.jsファイルを読み込みます。
demo.jsファイル内に、パネルの切り替えやテーマの変更のロジックを記述します。以下は、その基本的な例です。

<script src="bespoke.js"></script>
<script src="demo.js"></script>

demo.jsファイル内の記述

※キーボードの「←」「→」でパネルが左右に移動し、「↑」「↓」でテーマ(themes)が変わる様に設定してます。必要に応じて変更して下さい。

(function() {
	'use strict';

	var themes,
		selectedThemeIndex,
		instructionsTimeout,
		deck;

	function init() {
		deck = bespoke.from('article');
		initThemeSwitching();
	}

	init();

	function initThemeSwitching() {
		themes = [
			'coverflow',
			'classic',
			'cube',
			'carousel',
			'concave'
		];
		
		selectedThemeIndex = 0;

		initInstructions();
		initKeys();
		initSlideGestures();
		initThemeGestures();
		initButtons();

		selectTheme(0);
	}

	function initInstructions() {
		if (isTouch()) {
			document.getElementById('input-method').innerHTML = 'Swipe up and down';
		}

		instructionsTimeout = setTimeout(showInstructions, 5000);
	}

	function initKeys() {
		if (/Firefox/.test(navigator.userAgent)) {
			document.addEventListener('keydown', function(e) {
				if (e.which >= 37 && e.which <= 40) {
					e.preventDefault();
				}
			});
		}

		document.addEventListener('keydown', function(e) {
			var key = e.which;

			key === 37 && deck.prev();
			(key === 32 || key === 39) && deck.next();

			key === 38 && prevTheme();
			key === 40 && nextTheme();
		});
	}

	function initSlideGestures() {
		var main = document.getElementById('main'),
			startPosition,
			delta,

			singleTouch = function(fn, preventDefault) {
				return function(e) {
					if (preventDefault) {
						e.preventDefault();
					}
					e.touches.length === 1 && fn(e.touches[0].pageX);
				};
			},

			touchstart = singleTouch(function(position) {
				startPosition = position;
				delta = 0;
			}),

			touchmove = singleTouch(function(position) {
				delta = position - startPosition;
			}, true),

			touchend = function() {
				if (Math.abs(delta) < 50) {
					return;
				}

				delta > 0 ? deck.prev() : deck.next();
			};

		main.addEventListener('touchstart', touchstart);
		main.addEventListener('touchmove', touchmove);
		main.addEventListener('touchend', touchend);
	}

	function initThemeGestures() {
		var startPosition,
			delta,

			singleTouch = function(fn, preventDefault) {
				return function(e) {
					if (preventDefault) {
						e.preventDefault();
					}
					e.touches.length === 1 && fn(e.touches[0].pageY);
				};
			};

		document.addEventListener('touchstart', singleTouch(function(position) {
			startPosition = position;
			delta = 0;
		}));

		document.addEventListener('touchmove', singleTouch(function(position) {
			delta = position - startPosition;
		}, true));

		document.addEventListener('touchend', function() {
			if (Math.abs(delta) < 100) {
				return;
			}

			delta > 0 ? prevTheme() : nextTheme();
		});
	}

	function initButtons() {
		document.getElementById('up-arrow').addEventListener('click', prevTheme);
		document.getElementById('down-arrow').addEventListener('click', nextTheme);
	}

	function selectTheme(index) {
		var theme = themes[index];
		document.body.className = theme;
		document.getElementById('theme').innerHTML = theme[0].toUpperCase() + theme.slice(1);
		selectedThemeIndex = index;
	}

	function nextTheme() {
		offsetSelectedTheme(1);
		hideInstructions();
	}

	function prevTheme() {
		offsetSelectedTheme(-1);
		hideInstructions();
	}

	function offsetSelectedTheme(n) {
		selectTheme(modulo(selectedThemeIndex + n, themes.length));
	}

	function showInstructions() {
		document.querySelectorAll('header p')[0].className = 'visible';
	}

	function hideInstructions() {
		clearTimeout(instructionsTimeout);
		document.querySelectorAll('header p')[0].className = 'hidden';
	}

	function isTouch() {
		return !!('ontouchstart' in window) || navigator.msMaxTouchPoints;
	}

	function modulo(num, n) {
		return ((num % n) + n) % n;
	}

}());

このJavaScriptでは、キーボード操作やタッチジェスチャーでスライドを操作するためのロジックが含まれています。

bespoke.js:プレゼン用のパネルとテーマを表示するデモページ

実際の動作を確認したい方は、以下のデモページをぜひご覧ください。実際にbespoke.jsを使って、プレゼン用のパネルとテーマをどのように表示するかを体験できます。直感的な操作感と軽量なパフォーマンスを体感できるはずです。

bespoke.js:プレゼン用のパネルとテーマを表示するデモ

ソース元:Bespoke.js

このチュートリアルで使用したbespoke.jsは、オープンソースで提供されており、公式サイトからダウンロードできます。さらに詳細なドキュメントやプラグインも公開されていますので、プレゼンをより高度にカスタマイズしたい方は参考にしてみてください。

ソース元:Bespoke.js

パワーポイント vs bespoke.js

記事の最後に、bespoke.jsとパワーポイントの使い分けについて少し触れておきます。プレゼンテーションツールとして最も広く使われているのは依然としてパワーポイントやGoogleスライドですが、これらはカジュアルなプレゼンや標準的なビジネスシーンには非常に適しています。

一方で、bespoke.jsのようなカスタマイズ可能なライブラリは、より独自性や創造性を求めるプレゼンテーションに向いています。例えば、デジタルプロジェクトの発表やインタラクティブなプレゼンテーションが求められるシーンでは、bespoke.jsの強力なカスタマイズ性が大いに活かされるでしょう。

結論としては、用途によってどちらを選ぶかを決めることが重要です。短時間で効果的なプレゼンを作成したい場合はパワーポイントが最適ですが、特別な演出やインタラクティブな要素を加えたいときにはbespoke.jsのようなカスタマイズ可能なツールを利用するのがおすすめです。

まとめ

本記事では、bespoke.jsを使ってプレゼンテーションを行うための基本的なステップとコード例を紹介しました。bespoke.jsの強みは、その軽量性と柔軟性にあります。パワーポイントやGoogleスライドに比べると少し敷居が高いかもしれませんが、使いこなすことで、他にはない独自のプレゼンテーションを作り上げることができます。

最後に、bespoke.jsを利用したプレゼン作成の流れを振り返ってみましょう。

  1. 基本的なCSSとHTMLの記述で、プレゼンの構造を作成。
  2. JavaScriptのカスタマイズによって、スライドの切り替えやテーマ変更をコントロール。
  3. デモページを参考にしながら、自分のプロジェクトに合わせたプレゼンを作り込む。

bespoke.jsは、エンジニアやデザイナーにとって非常に強力なツールです。ぜひこの記事を参考にして、自分だけのプレゼンを作成してみてください。

この記事が、エンジニア初心者やデザイナーにとって、bespoke.jsの魅力と使い方を理解する助けとなることを願っています。興味を持った方は、まずはデモページを試し、次に自分のプロジェクトに導入してみましょう。プレゼン作成が新しいレベルに進化すること間違いなしです!

 
※流用される場合は自己責任でお願いします。
 デモページheadタグ内のGoogleアナリティクスタグは流用しないで下さい。