Merge pull request #1 from yuki540net/feature/load-view

Feature/load view
This commit is contained in:
yuki540 2018-02-23 19:32:08 +09:00 committed by GitHub
commit c0954eaa8b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 1874 additions and 2 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -37,7 +37,81 @@ Designed by yuki540.
<link rel="stylesheet" href="./stylesheets/style.css" /> <link rel="stylesheet" href="./stylesheets/style.css" />
</head> </head>
<body> <body>
<main id="root"></main> <main id="root">
<!-- ******************************** load view ************************************ -->
<section id="load-view">
<section class="frame">
<div class="direction">
<div class="left"><div></div><div></div><div></div></div>
<div class="bottom"><div></div><div></div><div></div></div>
<div class="right"><div></div><div></div><div></div></div>
<div class="top"><div></div><div></div><div></div></div>
</div>
<div class="square"><div></div><div></div><div></div><div></div></div>
<div class="line"><div></div><div></div><div></div><div></div></div>
<div class="rect">
<div class="bar"><div></div><div></div><div></div><div></div></div>
<div class="effect"><div></div><div></div><div></div><div></div></div>
</div>
</section>
<section class="display">
<div class="bg"><div></div><div></div></div>
<div class="blocks">
<div class="block"><div></div></div>
<div class="block"><div></div></div>
<div class="block"><div></div></div>
<div class="block"><div></div></div>
<div class="block"><div></div></div>
<div class="block"><div></div></div>
<div class="block"><div></div></div>
</div>
<div id="progress-bar"><div></div></div>
</section>
<section class="illust"></section>
<section class="paints"></section>
<section class="catchcopy">
<div class="text-box">
<section class="text-split">
<div class="text"></div>
<div class="figure"><div></div><div></div><div></div></div>
</section>
<section class="text-split">
<div class="text"></div>
<div class="figure"><div></div><div></div><div></div></div>
</section>
<section class="text-split">
<div class="text"></div>
<div class="figure">
<div></div><div></div><div></div>
<div></div><div></div><div></div>
</div>
</section>
</div>
<section class="arrows">
<div class="arrow"><div></div></div>
<div class="arrow"><div></div></div>
<div class="arrow"><div></div></div>
</section>
</section>
<section class="ribbons">
<div class="ribbon"><div></div><div></div><div></div><div></div></div>
<div class="ribbon"><div></div><div></div><div></div><div></div></div>
</section>
<section class="catchcopy-frame">
<div class="dotted-line"><div></div><div></div><div></div><div></div></div>
<div class="dive">
<div class="angel"></div>
<div class="collision-effect"></div>
</div>
</section>
<section class="battle-panel">
<div class="player"><div></div></div>
<div class="player"><div></div></div>
<div class="cross"></div>
</section>
<section class="end-load-view"><div></div><div></div></section>
</section>
</main>
<script type="text/javascript" src="./scripts/app.min.js"></script> <script type="text/javascript" src="./scripts/app.min.js"></script>
</body> </body>
</html> </html>

View File

@ -4,3 +4,30 @@ console.log(' そんなにこのサイトの仕組みが知りたいの?')
console.log(' ↓ ここにコードがあるから、Starつけてよね❤') console.log(' ↓ ここにコードがあるから、Starつけてよね❤')
console.log(' https://github.com/yuki540net/DropOut') console.log(' https://github.com/yuki540net/DropOut')
console.log('##############################################') console.log('##############################################')
import * as util from './lib/util'
import preload_json from './config/preload'
setTimeout(() => {
testPreload(() => {
util.finisheLoadView()
}, (per) => {
util.updateCharPanel(per)
util.updateProgressBar(per)
})
}, 1200)
/**
* プリロードのテスト
*/
function testPreload(fn, progress) {
let per = 0
let timer = setInterval(() => {
per += 0.04
progress(per)
if(per >= 1) {
clearInterval(timer)
fn()
}
}, 200)
}

View File

@ -0,0 +1,9 @@
export default [
'./images/load-view/charcters/char-1.png',
'./images/load-view/charcters/char-2.png',
'./images/load-view/charcters/char-3.png',
'./images/load-view/charcters/char-4.png',
'./images/load-view/charcters/char-5.png',
'./images/load-view/charcters/char-6.png',
'./images/load-view/charcters/char-7.png',
]

88
src/scripts/lib/util.js Normal file
View File

@ -0,0 +1,88 @@
const load_view = document.getElementById('load-view')
const char_panel = document.querySelectorAll('.blocks .block')
const progress_bar = document.getElementById('progress-bar')
/**
* 画像のプリロード
* @param images : 画像パスの配列
* @param fn : コールバック関数
* @param progress : 読み込み状況取得用コールバック関数
*/
export const preload = (images, fn, progress) => {
const len = images.length
let load = 0
images.forEach((image, key) => {
const img = new Image()
img.src = image
img.onload = () => {
load += 1
progress({
size : len,
load : load,
per : load / len
})
if(load >= len) fn()
}
})
}
/**
* スマートフォンかどうかの真偽
* @return bool
*/
export const isSP = () => {
const useragent = navigator.userAgent.toLowerCase()
const reg = /(iphone|ipad|ipod|android|mobile)/
return reg.test(useragent)
}
/**
* PCかどうかの真偽
* return bool
*/
export const isPC = () => {
return !isSP()
}
/**
* 指定した時間に要素を非表示にする
* @param selector : セレクタ名
* @param time : 時間
*/
export const hiddenTimeout = (selector, time) => {
setTimeout(() => {
document.querySelector(selector).style.display = 'none'
}, time)
}
/**
* キャラクターパネルの更新
* @param per : 割合
*/
export const updateCharPanel = (per) => {
if(per >= 0.14) char_panel[0].setAttribute('data-state', 'true')
if(per >= 0.28) char_panel[1].setAttribute('data-state', 'true')
if(per >= 0.42) char_panel[2].setAttribute('data-state', 'true')
if(per >= 0.57) char_panel[3].setAttribute('data-state', 'true')
if(per >= 0.71) char_panel[4].setAttribute('data-state', 'true')
if(per >= 0.85) char_panel[5].setAttribute('data-state', 'true')
if(per >= 1.00) char_panel[6].setAttribute('data-state', 'true')
}
/**
* プログレスバーの更新
* @param per : 割合
*/
export const updateProgressBar = (per) => {
progress_bar.children[0].style.width = `${ per * 100 }%`
}
/**
* モーションパート
*/
export const finisheLoadView = () => {
load_view.setAttribute('data-state', 'fin')
}

View File

@ -1,2 +1,9 @@
$min-width: 1100px; $min-width: 1100px;
$min-height: 650px; $min-height: 650px;
$theme-bg: #FCFCF3; // 背景色
$theme-gray: #E4D6CE; // 灰色
$theme-pink: #C2617E; // ピンク
$theme-light-pink: #E5B8BD; // 薄ピンク
$theme-purple: #4A3F55; //
$theme-light-purple: #817487; // 薄紫

View File

@ -0,0 +1,8 @@
@keyframes fadein {
0% { opacity: 0; }
100% { opacity: 1; }
}
@keyframes fadeout {
0% { opacity: 1; }
100% { opacity: 0; }
}

View File

@ -0,0 +1,453 @@
/*** dire-left ***/
@keyframes load-view__dire-left-1 {
0% { opacity: 0.1; }
5% { opacity: 0.1; }
15% { opacity: 1; }
25% { opacity: 1; }
35% { opacity: 0.1; }
100% { opacity: 0.1; }
}
@keyframes load-view__dire-left-2 {
0% { opacity: 0.1; }
15% { opacity: 0.1; }
25% { opacity: 1; }
35% { opacity: 1; }
45% { opacity: 0.1; }
100% { opacity: 0.1; }
}
@keyframes load-view__dire-left-3 {
0% { opacity: 0.1; }
25% { opacity: 0.1; }
35% { opacity: 1; }
45% { opacity: 1; }
55% { opacity: 0.1; }
100% { opacity: 0.1; }
}
/*** dire-bottom ***/
@keyframes load-view__dire-bottom-1 {
0% { opacity: 0.1; }
25% { opacity: 0.1; }
35% { opacity: 1; }
45% { opacity: 1; }
55% { opacity: 0.1; }
100% { opacity: 0.1; }
}
@keyframes load-view__dire-bottom-2 {
0% { opacity: 0.1; }
35% { opacity: 0.1; }
45% { opacity: 1; }
55% { opacity: 1; }
65% { opacity: 0.1; }
100% { opacity: 0.1; }
}
@keyframes load-view__dire-bottom-3 {
0% { opacity: 0.1; }
45% { opacity: 0.1; }
55% { opacity: 1; }
65% { opacity: 1; }
75% { opacity: 0.1; }
100% { opacity: 0.1; }
}
/*** dire-right ***/
@keyframes load-view__dire-right-1 {
0% { opacity: 0.1; }
45% { opacity: 0.1; }
55% { opacity: 1; }
65% { opacity: 1; }
75% { opacity: 0.1; }
}
@keyframes load-view__dire-right-2 {
0% { opacity: 0.1; }
55% { opacity: 0.1; }
65% { opacity: 1; }
75% { opacity: 1; }
85% { opacity: 0.1; }
100% { opacity: 0.1; }
}
@keyframes load-view__dire-right-3 {
0% { opacity: 0.1; }
65% { opacity: 0.1; }
75% { opacity: 1; }
85% { opacity: 1; }
95% { opacity: 0.1; }
100% { opacity: 0.1; }
}
/*** dire-top ***/
@keyframes load-view__dire-top-1 {
0% { opacity: 0.1; }
60% { opacity: 0.1; }
70% { opacity: 1; }
80% { opacity: 1; }
90% { opacity: 0.1; }
100% { opacity: 0.1; }
}
@keyframes load-view__dire-top-2 {
0% { opacity: 0.1; }
70% { opacity: 0.1; }
80% { opacity: 1; }
90% { opacity: 1; }
100% { opacity: 0.1; }
}
@keyframes load-view__dire-top-3 {
0% { opacity: 0.1; }
80% { opacity: 0.1; }
90% { opacity: 1; }
100% { opacity: 1; }
}
/*** rect-bar ***/
@keyframes load-view__rect-bar1 {
0% { transform: translateX(100%); }
40% { transform: translateX(-100%); }
100% { transform: translateX(-100%); }
}
@keyframes load-view__rect-bar2 {
0% { transform: translateY(-100%); }
20% { transform: translateY(-100%); }
60% { transform: translateY(100%); }
100% { transform: translateY(100%); }
}
@keyframes load-view__rect-bar3 {
0% { transform: translateX(-100%); }
40% { transform: translateX(-100%); }
80% { transform: translateX(100%); }
100% { transform: translateX(100%); }
}
@keyframes load-view__rect-bar4 {
0% { transform: translateY(100%); }
60% { transform: translateY(100%); }
100% { transform: translateY(-100%); }
}
/*** rect-effect ***/
@keyframes load-view__rect-effect1 {
0% { opacity: 0; transform: scale(0.5); border-width: 20px; }
20% { opacity: 0; transform: scale(0.5); border-width: 20px; }
32% { opacity: 1; transform: scale(1.8); border-width: 0px; }
100% { opacity: 1; transform: scale(1.8); border-width: 0px; }
}
@keyframes load-view__rect-effect2 {
0% { opacity: 0; transform: scale(0.5); border-width: 20px; }
40% { opacity: 0; transform: scale(0.5); border-width: 20px; }
52% { opacity: 1; transform: scale(1.8); border-width: 0px; }
100% { opacity: 1; transform: scale(1.8); border-width: 0px; }
}
@keyframes load-view__rect-effect3 {
0% { opacity: 0; transform: scale(0.5); border-width: 20px; }
60% { opacity: 0; transform: scale(0.5); border-width: 20px; }
72% { opacity: 1; transform: scale(1.8); border-width: 0px; }
100% { opacity: 1; transform: scale(1.8); border-width: 0px; }
}
@keyframes load-view__rect-effect4 {
0% { transform: scale(1); }
20% { transform: scale(0); }
80% { transform: scale(0); }
100% { transform: scale(1); }
}
/*** block ***/
@keyframes load-view__block1 {
0% { transform: rotate(45deg) translateY(-100px); opacity: 0; }
100% { transform: rotate(45deg) translateY(0px); opacity: 1; }
}
@keyframes load-view__block2 {
0% { transform: rotate(45deg) translateY(100px); opacity: 0; }
100% { transform: rotate(45deg) translateY(0px); opacity: 1; }
}
/*** block-effect ***/
@keyframes load-view__block-effect {
0% { transform: scale(0.6); opacity: 0; border-width: 20px; }
50% { opacity: 1; }
100% { transform: scale(1.4); opacity: 0; border-width: 5px; }
}
/*** char ***/
@keyframes load-view__char1 {
0% { opacity: 0; transform: rotate(-35deg) scale(0.8); }
35% { transform: rotate(-55deg); }
70% { transform: rotate(-35deg); }
100% { opacity: 1; transform: rotate(-55deg) scale(1.0); }
}
@keyframes load-view__char2 {
0% { opacity: 0; transform: translate(20px, 10px) rotate(-45deg); }
100% { opacity: 1; transform: translate(0px, 0px) rotate(-45deg); }
}
@keyframes load-view__char3 {
0% { opacity: 0; transform: translateX(-20px) rotate(-45deg); }
100% { opacity: 1; transform: translateX(0px) rotate(-45deg); }
}
@keyframes load-view__char4 {
0% { opacity: 0; transform: translate(-20px, -20px) rotate(-45deg); }
100% { opacity: 1; transform: translate(0, 0) rotate(-45deg); }
}
@keyframes load-view__char5 {
0% { opacity: 0; transform: rotate(-45deg) scale(1); }
50% { transform: rotate(-45deg) scale(1.2); }
100% { opacity: 1; transform: rotate(-45deg) scale(1); }
}
@keyframes load-view__char6 {
0% { opacity: 0; transform: translate(0px, 0px) rotate(-45deg); }
25% { transform: translate(-10px, -10px) rotate(-45deg); }
50% { transform: translate(0px, 0px) rotate(-45deg); }
75% { transform: translate(-10px, -10px) rotate(-45deg); }
100% { opacity: 1; transform: translate(0, 0) rotate(-45deg); }
}
@keyframes load-view__char7 {
0% { opacity: 0; transform: scale(1.4) rotate(-45deg); }
25% { transform: scale(1.2) rotate(-45deg); }
50% { opacity: 1; transform: scale(1.4) rotate(-45deg); }
75% { opacity: 1; transform: scale(1.2) rotate(-45deg); }
100% { opacity: 1; transform: scale(1.4) rotate(-45deg); }
}
/*** hidden-block ***/
@keyframes load-view__hidden-block {
0% { transform: scale(1) rotate(45deg); opacity: 1; }
35% { transform: scale(1.2) rotate(45deg); opacity: 1; }
100% { transform: scale(0.5) rotate(45deg); opacity: 0; }
}
/*** hidden-progress-bar ***/
@keyframes load-view__hidden-progress-bar {
0% { width: calc(100% - 200px); opacity: 1; }
80% { opacity: 1; }
100% { width: 0; opacity: 0; }
}
/*** show-illust ***/
@keyframes load-view__show-illust {
0% { opacity: 0; transform: translateX(60px); }
100% { opacity: 1; transform: translateX(0%); }
}
/*** hidden-illust ***/
@keyframes load-view__hidden-illust {
0% { opacity: 1; }
30% { opacity: 1; }
100% { opacity: 0; }
}
/*** attack-illust ***/
@keyframes load-view__attack-illust {
0% { transform: translateY(0px); }
30% { transform: translateY(0px); }
70% { transform: translateY(-60px); }
100% { transform: translateY(0px); }
}
/*** attack-effect ***/
@keyframes load-view__attack-effect {
0% { opacity: 0; transform: scale(0.5); }
50% { opacity: 1; }
100% { opacity: 0; transform: scale(2.4); }
}
/*** fail-paint ***/
@keyframes load-view___fail-paint {
0% { top: -120px; left: calc(50% - 30px); width: 60px; height: 60px; border-radius: 50%; }
30% { top: calc(50% - 30px); left: calc(50% - 30px); width: 60px; height: 60px; border-radius: 50%; }
100% { top: 0; left: 0; width: 100%; height: 100%; border-radius: 10px; }
}
/*** figure1 ***/
@keyframes load-view__figure1-1 {
0% { border-top-width: 0; opacity: 0; }
100% { border-top-width: 50px; opacity: 1; }
}
@keyframes load-view__figure1-2 {
0% { height: 0; opacity: 0; }
100% { height: 50px; opacity: 1; }
}
@keyframes load-view__figure1-3 {
0% { transform: translateY(-50px); opacity: 0; }
30% { transform: translateY(0px); opacity: 1; }
65% { transform: translateY(-15px); opacity: 1; }
100% { transform: translateY(0px); opacity: 1; }
}
/*** figure2 ***/
@keyframes load-view__figure2-1 {
0% { transform: translateY(-30px); opacity: 0; }
100% { transform: translateY(0px); opacity: 1; }
}
@keyframes load-view__figure2-2 {
0% { transform: translateY(-50px); opacity: 0; }
30% { transform: translateY(0px); opacity: 1; }
65% { transform: translateY(-15px); opacity: 1; }
100% { transform: translateY(0px); opacity: 1; }
}
@keyframes load-view__figure2-3 {
0% { transform: translateY(30px) rotate(90deg); opacity: 0; }
100% { transform: translateY(0px) rotate(0deg); opacity: 1; }
}
/*** figure3 ***/
@keyframes load-view__figure3-1 {
0% { transform: translateY(-50px); opacity: 0; }
30% { transform: translateY(0px); opacity: 1; }
65% { transform: translateY(-15px); opacity: 1; }
100% { transform: translateY(0px); opacity: 1; }
}
@keyframes load-view__figure3-2 {
0% { transform: translateY(30px) rotate(90deg); opacity: 0; }
100% { transform: translateY(0px) rotate(0deg); opacity: 1; }
}
@keyframes load-view__figure3-3 {
0% { transform: translateY(-30px); opacity: 0; }
100% { transform: translateY(0px); opacity: 1; }
}
@keyframes load-view__figure3-6 {
0% { border-top-width: 0; opacity: 0; }
100% { border-top-width: 50px; opacity: 1; }
}
/*** catchcopy ***/
@keyframes load-view__catchcopy {
0% { opacity: 0; transform: scale(1.15); }
100% { opacity: 1; transform: scale(1.0); }
}
@keyframes load-view__catchcopy-bg1 {
0% { background-color: $theme-light-pink; }
100% { background-color: $theme-bg; }
}
@keyframes load-view__catchcopy-bg2 {
0% { background-color: $theme-bg; }
100% { background-color: #9994A6; }
}
@keyframes load-view__catchcopy-bg3 {
0% { background-color: #9994A6; }
100% { background-color: $theme-gray; }
}
/*** arrow ***/
@keyframes load-view__arrow {
0% { transform: translateX(calc(-100% - 3px)); }
100% { transform: translateX(0%); }
}
/*** ribbon ***/
@keyframes load-view__ribbon-1 {
0% { transform: translateY(-100%); }
100% { transform: translateY(0%); }
}
@keyframes load-view__ribbon-2 {
0% { transform: translateX(-100%); }
100% { transform: translateX(0%); }
}
@keyframes load-view__ribbon-3 {
0% { transform: translateY(100%); }
100% { transform: translateY(0%); }
}
@keyframes load-view__ribbon-4 {
0% { transform: translateX(100%); }
100% { transform: translateX(0%); }
}
/*** dotted-line ***/
@keyframes load-view__dotted-line1 {
0% { transform: translateX(100%); }
40% { transform: translateX(-100%); }
100% { transform: translateX(-100%); }
}
@keyframes load-view__dotted-line2 {
0% { transform: translateY(-100%); }
20% { transform: translateY(-100%); }
60% { transform: translateY(100%); }
100% { transform: translateY(100%); }
}
@keyframes load-view__dotted-line3 {
0% { transform: translateX(-100%); }
40% { transform: translateX(-100%); }
80% { transform: translateX(100%); }
100% { transform: translateX(100%); }
}
@keyframes load-view__dotted-line4 {
0% { transform: translateY(100%); }
60% { transform: translateY(100%); }
100% { transform: translateY(-100%); }
}
/*** collision-effect ***/
@keyframes load-view__collision-effect2 {
0% { border-width: 5px; transform: scale(0.6); opacity: 0; }
50% { opacity: 1; }
100% { border-width: 0px; transform: scale(1); opacity: 0; }
}
@keyframes load-view__collision-effect1 {
0% { border-width: 10px; transform: scale(0.6); opacity: 0; }
50% { opacity: 1; }
100% { border-width: 5px; transform: scale(1); opacity: 0; }
}
/*** angel ***/
@keyframes load-view__angel-move {
0% { transform: translateX(665px); }
100% { transform: translateX(550px); }
}
@keyframes load-view__angel-fly {
0% { transform: translateY(-75px) rotateY(180deg); opacity: 0; }
25% { transform: translateY(-60px) rotateY(180deg); opacity: 1; }
50% { transform: translateY(-75px) rotateY(180deg); opacity: 1; }
75% { transform: translateY(-60px) rotateY(180deg); opacity: 1; }
100% { transform: translateY(-75px) rotateY(180deg); opacity: 1; }
}
@keyframes load-view__angel-dark {
0% { transform: translateY(-75px) scale(0); }
50% { transform: translateY(-75px) scale(1); }
100% { transform: translateY(-75px) scale(0); }
}
/*** player ***/
@keyframes load-view__player-scale {
0% { transform: scale(1.4); }
30% { transform: scale(1.02); }
100% { transform: scale(1); }
}
@keyframes load-view__player1 {
0% { transform: translate(-100px, 70px); opacity: 0; }
30% { transform: translate(-5px, 2.5px); opacity: 1; }
100% { transform: translate(0px, 0px); opacity: 1; }
}
@keyframes load-view__player2 {
0% { transform: translate(100px, -70px); opacity: 0; }
30% { transform: translate(5px, -2.5px); opacity: 1; }
100% { transform: translate(0px, 0px); opacity: 1; }
}
/*** cross ***/
@keyframes load-view__cross1 {
0% { transform: rotate(0deg); opacity: 0; }
100% { transform: rotate(45deg); opacity: 1; }
}
@keyframes load-view__cross2 {
0% { transform: rotate(0deg); opacity: 0; }
100% { transform: rotate(-45deg); opacity: 1; }
}
/*** circle ***/
@keyframes load-view__circle {
0% { transform: scale(0) rotate(-5deg); }
100% { transform: scale(1) rotate(-5deg); }
}
/*** end ***/
@keyframes load-view__end {
0% { left: 50%; width: 0; }
100% { left: 0%; width: 100%; }
}

File diff suppressed because it is too large Load Diff

View File

@ -35,7 +35,12 @@ const css = {
{ {
test: /\.scss$/, test: /\.scss$/,
use: ExtractTextPlugin.extract([ use: ExtractTextPlugin.extract([
{ loader: 'css-loader' }, {
loader: 'css-loader',
options: {
url: false
}
},
{ {
loader: 'sass-loader', loader: 'sass-loader',
options: { options: {