Added design and sound effect
This commit is contained in:
parent
7e8bce941f
commit
f066eeaf28
BIN
public/timeout.wav
Normal file
BIN
public/timeout.wav
Normal file
Binary file not shown.
12
src/App.vue
12
src/App.vue
@ -1,8 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div id="app">
|
<div id="app">
|
||||||
<p class="error" v-if="wakeLockAvailable == false">Wake lock not available</p>
|
<p class="error" v-if="wakeLockAvailable == false">Wake lock not available</p>
|
||||||
<Settings v-if="time == 0" v-on:set-time="setTime"/>
|
<Settings v-if="time == 0" v-on:set-time="setTime" v-on:set-playsound="setPlaySound"/>
|
||||||
<Timer v-if="time != 0" v-bind:time="time"/>
|
<Timer v-if="time != 0" v-bind:time="time" v-bind:playsound="playsound"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -19,6 +19,7 @@ export default {
|
|||||||
data: function() {
|
data: function() {
|
||||||
return {
|
return {
|
||||||
time: 0,
|
time: 0,
|
||||||
|
playsound: false,
|
||||||
wakeLockAvailable: this.hasWakeLock()
|
wakeLockAvailable: this.hasWakeLock()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -26,6 +27,9 @@ export default {
|
|||||||
setTime(number) {
|
setTime(number) {
|
||||||
this.time = number;
|
this.time = number;
|
||||||
},
|
},
|
||||||
|
setPlaySound(state) {
|
||||||
|
this.playsound = state;
|
||||||
|
},
|
||||||
hasWakeLock() {
|
hasWakeLock() {
|
||||||
if ('wakeLock' in navigator) {
|
if ('wakeLock' in navigator) {
|
||||||
return true;
|
return true;
|
||||||
@ -41,6 +45,8 @@ export default {
|
|||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
|
||||||
html, body {
|
html, body {
|
||||||
|
background-image: url("~@/img/background.png");
|
||||||
|
background-size: cover;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
@ -49,7 +55,7 @@ html, body {
|
|||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #2c3e50;
|
color: $white;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,13 @@
|
|||||||
<span class="time-choice" v-bind:class="{ selected: time == 75 }" v-on:click="setTime(75)">75</span>
|
<span class="time-choice" v-bind:class="{ selected: time == 75 }" v-on:click="setTime(75)">75</span>
|
||||||
<span class="time-choice" v-bind:class="{ selected: time == 90 }" v-on:click="setTime(90)">90</span>
|
<span class="time-choice" v-bind:class="{ selected: time == 90 }" v-on:click="setTime(90)">90</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="playsound">
|
||||||
|
<p>Geluid afspelen?</p>
|
||||||
|
<label class="switch">
|
||||||
|
<input type="checkbox" class="playSound" v-model="playsound">
|
||||||
|
<span class="slider round"></span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
<button class="start-game" v-on:click="startGame()">Start het spel!</button>
|
<button class="start-game" v-on:click="startGame()">Start het spel!</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -19,13 +26,19 @@ export default {
|
|||||||
data: function() {
|
data: function() {
|
||||||
return {
|
return {
|
||||||
time: 0,
|
time: 0,
|
||||||
|
playsound: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setTime(time) {
|
setTime(time) {
|
||||||
this.time = time
|
this.time = time
|
||||||
},
|
},
|
||||||
|
setPlaySound() {
|
||||||
|
let state = document.querySelector(".playSound").checked;
|
||||||
|
this.playsound = state;
|
||||||
|
},
|
||||||
startGame() {
|
startGame() {
|
||||||
|
this.$emit('set-playsound', this.playsound);
|
||||||
this.$emit('set-time', this.time);
|
this.$emit('set-time', this.time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -33,6 +46,7 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
p { margin-top: 0; margin-bottom: 1em; padding-top: 1em;}
|
||||||
.time-choice {
|
.time-choice {
|
||||||
font-size: 48px;
|
font-size: 48px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
@ -44,11 +58,13 @@ export default {
|
|||||||
|
|
||||||
.start-game {
|
.start-game {
|
||||||
appearance: none;
|
appearance: none;
|
||||||
border: 1px solid #2c3e50;
|
border: 1px solid $white;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
background: none;
|
background: none;
|
||||||
padding: 2rem;
|
padding: 2rem;
|
||||||
|
color: $white;
|
||||||
|
margin: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ export default {
|
|||||||
name: "Timer",
|
name: "Timer",
|
||||||
props: {
|
props: {
|
||||||
time: Number,
|
time: Number,
|
||||||
|
playsound: Boolean,
|
||||||
},
|
},
|
||||||
data: function() {
|
data: function() {
|
||||||
return {
|
return {
|
||||||
@ -41,6 +42,11 @@ export default {
|
|||||||
this.countDown--;
|
this.countDown--;
|
||||||
if(this.countDown == 0) {
|
if(this.countDown == 0) {
|
||||||
this.warning = true
|
this.warning = true
|
||||||
|
|
||||||
|
if(this.playsound) {
|
||||||
|
var audio = new Audio('timeout.wav');
|
||||||
|
audio.play();
|
||||||
|
}
|
||||||
clearInterval(Interval);
|
clearInterval(Interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,8 +76,15 @@ export default {
|
|||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
.timeleft {
|
.timeleft {
|
||||||
font-size: 5rem;
|
font-size: 60px;
|
||||||
margin: 40px;
|
padding: 23px 20px 84px 20px;
|
||||||
|
margin: 10px 0;
|
||||||
|
color: $black;
|
||||||
|
background-image: url("~@/img/tile-back.svg");
|
||||||
|
background-size: cover;
|
||||||
|
text-align: center;
|
||||||
|
width: 80px;
|
||||||
|
height: 60px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.timeout {
|
.timeout {
|
||||||
@ -84,7 +97,7 @@ export default {
|
|||||||
|
|
||||||
.timerBtn {
|
.timerBtn {
|
||||||
appearance: none;
|
appearance: none;
|
||||||
border: 1px solid #2c3e50;
|
border: 1px solid $white;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
font-size: 3rem;
|
font-size: 3rem;
|
||||||
background: none;
|
background: none;
|
||||||
@ -94,7 +107,7 @@ export default {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
width: 2rem;
|
width: 2rem;
|
||||||
background-color: #2c3e50;
|
background-color: $white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIN
src/img/background.png
Normal file
BIN
src/img/background.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 241 KiB |
74
src/img/tile-back.svg
Normal file
74
src/img/tile-back.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 7.8 KiB |
63
src/scss/form-elements.scss
Normal file
63
src/scss/form-elements.scss
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
|
||||||
|
/* The switch - the box around the slider */
|
||||||
|
.switch {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
width: 60px;
|
||||||
|
height: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide default HTML checkbox */
|
||||||
|
.switch input {
|
||||||
|
opacity: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The slider */
|
||||||
|
.slider {
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background-color: $light-gray;
|
||||||
|
-webkit-transition: .4s;
|
||||||
|
transition: .4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider:before {
|
||||||
|
position: absolute;
|
||||||
|
content: "";
|
||||||
|
height: 26px;
|
||||||
|
width: 26px;
|
||||||
|
left: 4px;
|
||||||
|
bottom: 4px;
|
||||||
|
background-color: white;
|
||||||
|
-webkit-transition: .4s;
|
||||||
|
transition: .4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:checked + .slider {
|
||||||
|
background-color: $red;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus + .slider {
|
||||||
|
box-shadow: 0 0 1px $red;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:checked + .slider:before {
|
||||||
|
-webkit-transform: translateX(26px);
|
||||||
|
-ms-transform: translateX(26px);
|
||||||
|
transform: translateX(26px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Rounded sliders */
|
||||||
|
.slider.round {
|
||||||
|
border-radius: 34px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slider.round:before {
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
3
src/scss/includes.scss
Normal file
3
src/scss/includes.scss
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
@import "~@/scss/vars.scss";
|
||||||
|
@import "~@/scss/form-elements.scss";
|
||||||
|
@import "~@/scss/fonts.scss";
|
@ -1,3 +1,6 @@
|
|||||||
$light-red: #ff8888;
|
$light-red: #ff8888;
|
||||||
$dark-red: #880000;
|
$dark-red: #880000;
|
||||||
$red: #ff0000;
|
$red: #ff0000;
|
||||||
|
$white: #f9e3d1;
|
||||||
|
$black: #121212;
|
||||||
|
$light-gray: #ababab;
|
@ -9,7 +9,7 @@ module.exports = {
|
|||||||
// `scss` syntax requires an semicolon at the end of a statement, while `sass` syntax requires none
|
// `scss` syntax requires an semicolon at the end of a statement, while `sass` syntax requires none
|
||||||
// in that case, we can target the `scss` syntax separately using the `scss` option
|
// in that case, we can target the `scss` syntax separately using the `scss` option
|
||||||
scss: {
|
scss: {
|
||||||
additionalData: `@import "~@/scss/fonts.scss";@import "~@/scss/vars.scss";`
|
additionalData: `@import "~@/scss/includes.scss";`
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user