6 Commits

Author SHA1 Message Date
Josh Creek f20995a879 chore(*): Update version number 2022-10-24 13:48:12 +01:00
Josh Creek 84e1e39f9c Merge pull request #24 from jcreek/3-add-nicer-styling-to-selection-reveal
feat(#3): Add fireworks and sound to selection reveal
2022-10-24 13:44:18 +01:00
Josh Creek 7783162127 feat(#3): Add fireworks and sound to selection reveal 2022-10-24 13:42:44 +01:00
Josh Creek f1efac7c7f Merge pull request #23 from jcreek/11-add-optional-spinner-audio-with-a-mute-toggle-button
feat(#11): Add spinner audio and mute button
2022-10-24 12:32:13 +01:00
Josh Creek d8fe76f62c fix(#11): Fix styling 2022-10-24 12:31:30 +01:00
Josh Creek b9a40bb8a5 feat(#11): Add spinner audio and mute button 2022-10-24 12:27:32 +01:00
8 changed files with 307 additions and 461 deletions
+212 -460
View File
File diff suppressed because it is too large Load Diff
+3 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "SelectionWheel", "name": "SelectionWheel",
"version": "1.4.1", "version": "1.5.0",
"description": "A fun and simple selection wheel.", "description": "A fun and simple selection wheel.",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
@@ -38,8 +38,10 @@
"workbox-cli": "^6.5.4" "workbox-cli": "^6.5.4"
}, },
"dependencies": { "dependencies": {
"@fireworks-js/web": "^2.5.1",
"@types/d3": "^7.4.0", "@types/d3": "^7.4.0",
"d3": "^7.6.1", "d3": "^7.6.1",
"fireworks-js": "^2.5.1",
"html-webpack-plugin": "^5.5.0", "html-webpack-plugin": "^5.5.0",
"react-dev-utils": "^12.0.1", "react-dev-utils": "^12.0.1",
"webpack-manifest-plugin": "^5.0.0", "webpack-manifest-plugin": "^5.0.0",
Binary file not shown.
Binary file not shown.
+17
View File
@@ -0,0 +1,17 @@
export default {
pauseAudio(audio: HTMLAudioElement) {
audio.pause();
},
playAudio(audio: HTMLAudioElement) {
audio.play();
},
stopAudio(audio: HTMLAudioElement) {
audio.pause();
// eslint-disable-next-line no-param-reassign
audio.currentTime = 0;
},
toggleMute(audio: HTMLAudioElement) {
// eslint-disable-next-line no-param-reassign
audio.muted = !audio.muted;
},
};
+58
View File
@@ -1,5 +1,9 @@
import * as d3 from 'd3'; import * as d3 from 'd3';
import { Fireworks } from 'fireworks-js';
import loadServiceWorker from './loadServiceWorker'; import loadServiceWorker from './loadServiceWorker';
import audioControls from './audioControls';
import spinnerMp3 from './assets/spinner-sound.mp3';
import tadaMp3 from './assets/tada-fanfare.mp3';
require('./assets/favicon.ico'); require('./assets/favicon.ico');
require('./assets/android-chrome-192x192.png'); require('./assets/android-chrome-192x192.png');
@@ -9,6 +13,27 @@ require('./assets/favicon-16x16.png');
require('./assets/favicon-32x32.png'); require('./assets/favicon-32x32.png');
require('./styles/main.scss'); require('./styles/main.scss');
const wheelSpinningSound = new Audio(spinnerMp3);
const tadaSound = new Audio(tadaMp3);
if (window.localStorage.audioMuteSetting) {
wheelSpinningSound.muted = window.localStorage.audioMuteSetting;
tadaSound.muted = window.localStorage.audioMuteSetting;
}
const fireworksContainer = document.getElementById('fireworks-container');
function fireworksContainerOnClick() {
fireworksContainer.style.display = 'none';
document.getElementById('chart').click();
document.getElementsByClassName('chartholder')[0].dispatchEvent(new Event('click'));
}
fireworksContainer.onclick = fireworksContainerOnClick;
const fireworks = new Fireworks(fireworksContainer, {
// sound: {
// enabled: !wheelSpinningSound.muted,
// },
});
const padding = { const padding = {
top: 20, top: 20,
right: 40, right: 40,
@@ -156,9 +181,16 @@ function drawWheel() {
// all slices have been seen, all done // all slices have been seen, all done
// console.log(`OldPick: ${oldpick.length}`, `Data length: ${data.length}`); // console.log(`OldPick: ${oldpick.length}`, `Data length: ${data.length}`);
if (oldpick.length === data.length) { if (oldpick.length === data.length) {
fireworksContainer.style.display = 'none';
fireworks.clear();
stopSpinning(); stopSpinning();
return; return;
} }
audioControls.stopAudio(tadaSound);
audioControls.playAudio(wheelSpinningSound);
fireworksContainer.style.display = 'none';
fireworks.stop();
const ps = 360 / data.length; const ps = 360 / data.length;
const rng = Math.floor(Math.random() * 1440 + 360); const rng = Math.floor(Math.random() * 1440 + 360);
@@ -185,6 +217,16 @@ function drawWheel() {
d3.select('#question h1').text(data[picked].label.trim()); d3.select('#question h1').text(data[picked].label.trim());
oldrotation = rotation; oldrotation = rotation;
audioControls.stopAudio(wheelSpinningSound);
audioControls.playAudio(tadaSound);
fireworksContainer.style.display = 'block';
const sizes = {
width: window.innerWidth,
height: window.innerHeight,
};
fireworks.updateSize(sizes);
fireworks.start();
/* Get the result value from object "data" */ /* Get the result value from object "data" */
// console.log(data[picked].value); // console.log(data[picked].value);
@@ -200,6 +242,15 @@ function drawWheel() {
function startOver() { function startOver() {
stopSpinning(); stopSpinning();
audioControls.stopAudio(wheelSpinningSound);
}
function toggleMute() {
audioControls.toggleMute(wheelSpinningSound);
audioControls.toggleMute(tadaSound);
this.textContent = wheelSpinningSound.muted ? 'Unmute' : 'Mute';
window.localStorage.audioMuteSetting = wheelSpinningSound.muted;
// TODO - toggle muting the fireworks from here
} }
function startSpinning() { function startSpinning() {
@@ -231,7 +282,14 @@ function startSpinning() {
startOverElement.setAttribute('role', 'button'); startOverElement.setAttribute('role', 'button');
startOverElement.onclick = startOver; startOverElement.onclick = startOver;
startOverElement.textContent = 'Start over'; startOverElement.textContent = 'Start over';
const muteElement = document.createElement('button');
muteElement.setAttribute('id', 'mute');
muteElement.setAttribute('class', 'button button-black');
muteElement.setAttribute('role', 'button');
muteElement.onclick = toggleMute;
muteElement.textContent = wheelSpinningSound.muted ? 'Unmute' : 'Mute';
chartElement.appendChild(startOverElement); chartElement.appendChild(startOverElement);
chartElement.appendChild(muteElement);
document.getElementById('spinner-container').appendChild(chartElement); document.getElementById('spinner-container').appendChild(chartElement);
const questionElement = document.createElement('div'); const questionElement = document.createElement('div');
questionElement.setAttribute('id', 'question'); questionElement.setAttribute('id', 'question');
+15
View File
@@ -91,6 +91,12 @@ body {
left: auto; left: auto;
} }
#mute {
position: absolute;
top: 140px;
left: auto;
}
#spinner-container { #spinner-container {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -176,6 +182,15 @@ text{
margin-bottom: 50px; margin-bottom: 50px;
} }
#fireworks-container {
display: none;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
#image{ #image{
width: 100%; width: 100%;
} }
+2
View File
@@ -56,5 +56,7 @@ For example, https://wheel.jcreek.co.uk/?imgUrl=https://www.mammal.org.uk/wp-con
<span> | </span> <span> | </span>
<span class="footer-items"><a href="/privacy-policy.html">Privacy Policy</a></span> <span class="footer-items"><a href="/privacy-policy.html">Privacy Policy</a></span>
</footer> </footer>
<div id="fireworks-container"></div>
</body> </body>
</html> </html>