WEBサイト制作の勉強

WEBサイト制作の勉強の為の解説ブログです。

フェリカテクニカルアカデミー

$.ajax(jQuery)とfetch APIを使ってsvgを外部ファイルとして読み込む

svgをcss3のアニメーションで動かす場合、下記のようにsvgファイルのコードをインラインでbody内に入れる必要があります。

<body>
<svg class="likeButton" width="500px" height="500px" viewBox="0 0 500 500">
  <circle class="explosion" r="150" cx="250" cy="250"></circle>
  <g class="particleLayer">
    <circle fill="#8CE8C3" cx="130" cy="126.5" r="12.5"/>
    <circle fill="#8CE8C3" cx="411" cy="313.5" r="12.5"/>
    <circle fill="#91D2FA" cx="279" cy="86.5" r="12.5"/>
    <circle fill="#91D2FA" cx="155" cy="390.5" r="12.5"/>

ただこのやり方だとbody内のソースの可読性が著しく下がってしまうので、svgタグ部分を外部ファイル化しajaxを使って非同期通信で読み込む方式に変更します。
ajaxで読み込めばbody内のソースも整理され、なおかつインラインの時と同じようにcsssvgをコントロールする事が出来ます。

<body>
<div id="box">
<!--ここ外部svgデータが挿入-->
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$.ajax({
url: 'logo.svg',//ここにsvgファイルのパスを入れる
})
.then(
// 1つめは通信成功時の処理
function(data){
	var svg = $(data).find('svg');
  $('#box').append(svg);
},
// 2つめは通信失敗時の処理
function(){
	alert('読み込み失敗');
});
</script>
</body>

Fetch APIを使ってsvgを呼び出す

JavaScriptの次世代の非同期通信の規格であるFetch APIを使用する事で、jqueryを使わずに非同期通信が行えるようになります。


フェッチ 【 fetch 】とは

ソフトウェアやネットワーク通信の分野では、データなどの受信側・需要側が(送信側・供給側から送られてくるのを待つのではなく)能動的に読み出しに行く、相手に送信するよう要求する、といった意味合いでフェッチという用語が用いられる。特に、送信側が能動的に送り出す「プッシュ」(push)方式と対比して、一定時間ごとに受信すべきデータの有無を繰り返し確認する受信側の動作を指す場合があり、「ポーリング」(polling)とも呼ばれる。

マイクロプロセッサ(CPU/MPU)では、命令を実行する最初の段階で、命令コード(インストラクション)をメインメモリ(またはキャッシュメモリ)から読み出し、プロセッサ内部のレジスタに転送する動作のことをフェッチという。フェッチされた命令デコード(解析)されて実行に移される。フェッチにかかる時間を「フェッチサイクル」(fetch cycle)あるいは「命令サイクル」(instruction cycle)という。

また、CPUやソフトウェアが将来必要になる(かもしれない)データなどを先取りして読み出しておくことで読み込み動作にかかる待ち時間を削減する手法が様々な分野で幅広く利用されており、そのような「先読み」方式のことを「プリフェッチ」(prefetch)という。

var box = document.getElementById("box")
fetch("logo.svg")
.then(function(response) {
    return response.text();
}).then(function(svg) {
    box.innerHTML = svg
})

Gitのインストールとvs-codeを使ってgithubのリポジトリーのクローンを自身のPCに作成

まずは自身のPCに入っているgitのバージョンを確認してみましょう。
コマンド画面で簡単に確認出来るので、コマンド画面で以下のコマンドを入力しましょう。

  • gitのバージョン確認
 $ git --version 


macは最初からgitがインストールされていますが、windowsはされていないので、されていない場合はここからgitをダウンロードしてインストールしましょう。
git-scm.com




techacademy.jp


eng-entrance.com


Homebrewでインストールする場合

macを使用している場合は「Homebrew」というパッケージマネージャーを使うと非常に便利なので、「Homebrew」をまずはダウンロードしておきましょう。


brew.sh
Homebrewは、macOSでのパッケージインストールを簡単にするパッケージ管理システムです。
例えば今回のように、Gitをインストールする、アップデートするなどを、インストーラーを利用するよりも簡単に実行できます。

Homebrewがダウンロードされていれば

$ brew install git

でgitの最新版をインストールし、バージョン確認(version 2.25.0が最新版 7月7日現在)





1.自身のPC内にgithubというフォルダを作成
2.githubに自身のリポジトリーを作る

3.作成したgithubフォルダ内に自身のPCにクローンを作る。

git clone [githubのリポジトリーのURL]

でクローンを作成


4.自身のメールアドレスとユーザーネームを登録する

git config --global user.name "githubのユーザー名"
git config --global user.email "XXXX@hogehoge.com"


5. クローンフォルダー内にindex.htmlを作成する
6.作成したindexをステージングし、コミットをしてプッシュ
7.github上でコミットを確認後、github上でindex.htmlを編集
8.vscodegithub上の編集をプルしてから、さらに編集し再度ステージングし、コミットをしてプッシュ
9.7と8を数回繰り返し後、git Historyを開きコミット一覧を確認
10.過去のコミットに戻す為「git reset --hard コミットID」で任意のコミットに移動、最後にheadのコミットに戻る
11.7を行ったあと、今度はvscodegithub上の編集をプルせずに、index.htmlを編集し再度ステージングし、コミットをしてプッシュするとコンフリクトが発生
12.コンフリクトを解消し、ステージングし、コミットをしてプッシュ



note.nkmk.me

ポートフォリオのテンプレート

ポートフォリオを作るに当たって、Bootstrapなどのフレームワークを使用する事も視野に入れておきましょう。
それぞれのメリット・デメリットを理解し、自身にとって最も有効だと思う物を選択する事が大事です。


bootstrapのテンプレート

templatemag.com

templatemag.com



HTML5&CSS3ベースのテンプレート

photoshopvip.net


photoshopvip.net


stories.freepik.com

CodyHouse Framework を使って簡単にタイムラインを作成する

年表や沿革などで使うタイムラインを作ってみましょう。cssのみで作れるシンプルな物のありますが、今回は「CodyHouse Framework」というフレームワークを使ったアニメーションタイムラインを作成してみます。


Vertical Timeline

codyhouse.co

使用するファイル

  • style.scss
  • main.js
  • imgフォルダ内のsvgアイコン
  • CodyHouse Framework本体のassetsフォルダ

CodyHouse Framework 本体のデータも必要なのでgithubからダウンロードしておきましょう。

github.com




<div class="cd-timeline js-cd-timeline">
<div class="container max-width-lg cd-timeline__container">


<div class="cd-timeline__block">
<div class="cd-timeline__img cd-timeline__img--picture">
<img src="img/cd-icon-picture.svg" alt="Picture">
</div> <!-- cd-timeline__img -->

<div class="cd-timeline__content text-component">
<h2>Title of section 1</h2>
<p class="color-contrast-medium"></p>
<div class="flex justify-between items-center">
<span class="cd-timeline__date">2019/10</span>
</div>
</div> <!-- cd-timeline__content -->
</div> <!-- cd-timeline__block -->




<div class="cd-timeline__block">
<div class="cd-timeline__img cd-timeline__img--picture">
<img src="img/cd-icon-picture.svg" alt="Picture">
</div> <!-- cd-timeline__img -->

<div class="cd-timeline__content text-component">
<h2>Title of section 2</h2>
<p class="color-contrast-medium"></p>
<div class="flex justify-between items-center">
<span class="cd-timeline__date">2020/03</span>
</div>
</div> <!-- cd-timeline__content -->
</div> <!-- cd-timeline__block -->


</div><!-- container -->
</div><!-- cd-timeline -->


<script src="js/main.js"></script>

スマートフォンでのナビメニュー

ナビゲーションメニューの押し易さ(使い易さ)というのはページ全体の使い易さに繋がる為、非常に大切です。
PCレイアウトの場合は、ある程度大きい面積の中でホバーアクションと組み合わせる事で、ある程度の解り易さは確保出来ます。
スマホでは制限された面積の中でメニューを作らないといけない為、PC以上に解り易いメニューの作成を心掛ける必要があります。

もちろん今現在、「ハンバーガーメニュー」がスマホ時のメニューのスタンダードになっていますが、しかし必ずしも全ての状況でハンバーガーメニューが良いという訳ではなく、色々なパターンから適切なスマホ用のナビを選べるようになりましょう。


ドロップダウン
f:id:yachin29:20180417114648p:plain

Apple(日本)



ドロワー(右から)
f:id:yachin29:20180417114736p:plain

Yahoo! JAPAN


アニメーション
f:id:yachin29:20180417114900p:plain

西武鉄道Webサイト



固定ナビ
f:id:yachin29:20180417114611p:plain

NTTドコモ ホーム








www.genius-web.co.jp


www.i3design.jp


pantograph.co.jp

.matchMedia()でjsをメディアクエリを使って条件分岐する

window.matchMedia

window.matchMediaというメソッド使用することでCSS側に記述するブレイクポイントの記述と同じような形でJS側の判定条件を記述する事ができます。


例 1000pxまではjsを有効にさせる

$(window).on('load resize', function(){
if(window.matchMedia('(min-width:1000px)').matches) {

1000pxまで有効にさせたいjavascript

}
});

ナビゲーションの場合

Toggleを使う場合、「:not(:animated)」を設定しないとボタンをクリックした回数分スライドしてしまうので、「:not(:animated)」の設定をしましょう。

$(window).on('load resize', function(){
if(window.matchMedia('(max-width:767px)').matches){
  //スマホの時の状態
    $('#g-nav').hide();//SPの時はnavを非表示にしておく
  }else{
  //タブレット・PCの時の状態
    $('#g-nav').show();//SP以外の時はnavを表示しておく
}
});

$('#btn').on('click',function(){
$('#g-nav:not(:animated)').slideToggle();
});

ユーザーエージェントでスマホかPCか判別してやる方法もあります

ユーザーエージェント

ユーザーエージェント(UserAgent)とはウェブサイトに訪問する際「Google Chromeからアクセスしています」「iPhoneからアクセスしています」などのどんな環境でアクセスしているのかの利用者の情報のことを言います。
ウェブサイトにアクセスする際にはこのユーザーエージェントを必ず送ることになっています。


今回のパターンはPC・タブレットであればjQueryを有効に。スマホiPhoneAndroid)であればjQueryを無効にします。
「!」エクスクラメーションマーク (exclamation mark)とは、Javascriptでは否定の意味で使われます。

if(!navigator.userAgent.match(/(iPhone|Android)/)){
$(function(){
//ここにjQueryの記述
});
}


逆にPC・タブレットであればjQueryを無効に。スマホiPhoneAndroid)であればjQueryを有効の場合

if(navigator.userAgent.match(/(iPhone|Android)/)){
$(function(){
//ここにjQueryの記述
});
}

また、PCであればjQueryを無効に。スマホiPhoneAndroid)とタブレットiPad)であればjQueryを有効の場合

if(navigator.userAgent.match(/(iPhone|iPad|Android)/)){
$(function(){
//ここにjQueryの記述
});
}


このように「|」で区切って自身でユーザーエージェントを追加する事も出来ます。

CSS3によるアニメーション・animation

CSS3によるアニメーションは大きく分けて、トランジション(transition)とアニメーション(animation)の2つに別ける事が出来ます。

CSS3におけるトランジション(transition)とアニメーション(animation)の違い


「transition」

  • 動かすために:hoverなどのきっかけが必要
  • トランジションでは実行後に元のプロパティ値に戻る
  • 比較的簡単な記述で動かす事が可能


「animation」

  • transitionより細かい設定が可能
  • 記述が複雑
  • 「@keyframes」の記述が必要

http://caniuse.com/などのサイトでブラウザサポート状況を確認する。

animation関連プロパティ

animation-name 必須

@keyframes で定義した名前を指定します。これを指定していないとアニメーションは実行されません。

animation-duration 必須

一回分のアニメーションを実行する時間の長さを指定します。

animation-timing-function

アニメーションのタイミングや進め方を指定します。
ease(初期値)-ゆっくり始まり、早くなり、ゆっくり終わる
ease-in -ゆっくり始まりだんだん早く
ease-out -早く始まり、遅くなる
ease-in-out -easeと似た感じ
linear -一定

weboook.blog22.fc2.com


animation-delay

要素が読み込まれてからアニメーションがいつ始まるかを指定します。初期値の 0 だとただちに実行されます。

animation-iteration-count (初期値は1)

アニメーションを繰り返す回数を数字で指定します。無限ループにするには infinite を指定。

animation-direction

アニメーションを繰り返す方向を指定します。

normal … 通常の方向で再生(初期値)
alternate … 奇数回で通常・偶数回で反対方向に再生(行って帰って行って帰って…という具合)
reverse … 逆方向に再生
alternate-reverse … alternate の逆方向に再生

animation-fill-mode

アニメーションの再生前後の状態を指定します。
none(初期値)
forwards … 再生後、最後のキーフレームの状態を保持
backwards … 再生前、最初のキーフレームの状態を適用
both … forwards と backwards の両方を適用



背景色が移り変わるアニメーション

body {
  background-color: #0CC;
  animation: bg-color 10s linear infinite;
}

@keyframes bg-color {
  0% { background-color: #0CC; }
  20% { background-color: #f1c40f; }
  40% { background-color: #1abc9c; }
  60% { background-color: #3498db; }
  80% { background-color: #9b59b6; }
  100% { background-color: #e74c3c; }
}

参考サイト

CSS3でアニメーション!transitionとanimationまとめ(サンプル付き) フラップイズム



CSS3アニメーションに挑戦!色が移り変わる背景を実装しよう | Webクリエイターボックス


http://www.nxworld.net/tips/css-ghost-button-good-chemistry-hover-effect.htmlwww.nxworld.net




背景にグラデーションを掛けたアニメーション

f:id:yachin29:20151002002549j:plain


便利なジェネレーション

www.gradient-animator.com



www.yui540.graphics



SVGによるアニメーション

postd.cc

jakearchibald.com