a whole bunch of crossbrowser and resizeable stuff

This commit is contained in:
Nicky Case 2018-04-24 14:12:38 -04:00
parent 1ef8e92c3f
commit 587c54045c
17 changed files with 117 additions and 54 deletions

View File

@ -88,12 +88,13 @@ b, strong{
left 0.3s ease-in-out, left 0.3s ease-in-out,
top 0.3s ease-in-out; top 0.3s ease-in-out;
} }
#scratch{ #scratch{
position: absolute;
cursor: none;
display: none; display: none;
pointer-events: none; pointer-events: none;
background-image: url(../sprites/scratch.png); width: 100%; height: 100%;
background-size: 200% 2000%;
background-position: 0% 0%;
} }
/* Skip */ /* Skip */

View File

@ -16,22 +16,23 @@ MY "WHY" FOR MAKING THIS:
<!-- TO TRANSLATE: "title", "description" --> <!-- TO TRANSLATE: "title", "description" -->
<title>The Wisdom and/or Madness of Crowds</title> <title>The Wisdom and/or Madness of Crowds</title>
<meta name="description" content="blah_blah_blah_blah_blah"/> <meta name="description" content="an interactive guide to human networks"/>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding"> <meta content="utf-8" http-equiv="encoding">
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=960, initial-scale=1, maximum-scale=1, user-scalable=0"/> <!--960, max-->
<link rel="icon" type="image/png" href="favicon.png"> <link rel="icon" type="image/png" href="favicon.png">
<!-- TO TRANSLATE: "name", "description" --> <!-- TO TRANSLATE: "name", "description" -->
<meta itemprop="name" content="The Wisdom and/or Madness of Crowds"> <meta itemprop="name" content="The Wisdom and/or Madness of Crowds">
<meta itemprop="description" content="blah_blah_blah_blah_blah"> <meta itemprop="description" content="an interactive guide to human networks">
<meta itemprop="image" content="http://ncase.me/crowds/social/thumbnail.png"> <meta itemprop="image" content="http://ncase.me/crowds/social/thumbnail.png">
<!-- TO TRANSLATE: "name", "description" --> <!-- TO TRANSLATE: "name", "description" -->
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@ncasenmare"> <meta name="twitter:site" content="@ncasenmare">
<meta name="twitter:title" content="The Wisdom and/or Madness of Crowds"> <meta name="twitter:title" content="The Wisdom and/or Madness of Crowds">
<meta name="twitter:description" content="blah_blah_blah_blah_blah"> <meta name="twitter:description" content="an interactive guide to human networks">
<meta name="twitter:creator" content="@ncasenmare"> <meta name="twitter:creator" content="@ncasenmare">
<meta name="twitter:image" content="http://ncase.me/crowds/social/thumbnail.png"> <meta name="twitter:image" content="http://ncase.me/crowds/social/thumbnail.png">
@ -40,7 +41,7 @@ MY "WHY" FOR MAKING THIS:
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:url" content="http://ncase.me/crowds/"> <meta property="og:url" content="http://ncase.me/crowds/">
<meta property="og:image" content="http://ncase.me/crowds/social/thumbnail.png"> <meta property="og:image" content="http://ncase.me/crowds/social/thumbnail.png">
<meta property="og:description" content="blah_blah_blah_blah_blah"> <meta property="og:description" content="an interactive guide to human networks">
<!-- Styles --> <!-- Styles -->
<link rel="stylesheet" type="text/css" href="css/index.css"> <link rel="stylesheet" type="text/css" href="css/index.css">
@ -62,7 +63,7 @@ MY "WHY" FOR MAKING THIS:
</div> </div>
<!-- Scratch Transition --> <!-- Scratch Transition -->
<div id="scratch"></div> <canvas id="scratch" width="711" height="400"></canvas>
<!-- Skip --> <!-- Skip -->
<div id="skip">skip &gt;</div> <div id="skip">skip &gt;</div>

View File

@ -43,6 +43,14 @@ function _touchWrapper(callback){
}; };
} }
// ALSO DON'T SCROLL WHEN TOUCH
/*document.addEventListener("touchstart", function(e){
e.preventDefault();
},false);
document.addEventListener("touchmove", function(e){
e.preventDefault();
},false);*/
// INIT // INIT
Mouse.init = function(target){ Mouse.init = function(target){

View File

@ -14,8 +14,7 @@ function Sprite(config){
self.rotation = 0; // radians self.rotation = 0; // radians
// The image! // The image!
self.image = new Image(); self.image = IMAGES[config.img];
self.image.src = config.src;
// Frames // Frames
self.currentFrame = 0; self.currentFrame = 0;

View File

@ -184,4 +184,12 @@ function _getBoundingClientRect(dom){
if(!bounds.x) bounds.x = bounds.left; // crossbrowser crap if(!bounds.x) bounds.x = bounds.left; // crossbrowser crap
if(!bounds.y) bounds.y = bounds.top; // crossbrowser crap if(!bounds.y) bounds.y = bounds.top; // crossbrowser crap
return bounds; return bounds;
}
function _stopPropButton(button){
button.onmousedown = function(event){
event.stopPropagation();
};
button.ontouchstart = function(event){
event.stopPropagation();
};
} }

View File

@ -1,5 +1,16 @@
window.onload = function(){ window.onload = function(){
// Start Preloading!
publish("prepreload");
}
subscribe("prepreload/done", function(){
// Bye Pre-Preloader!
var pre_preloader = $("#pre_preloader");
pre_preloader.parentNode.removeChild(pre_preloader);
// Setting up the main stuff // Setting up the main stuff
window.slideshow = new Slideshow(); window.slideshow = new Slideshow();
window.pencil = new Pencil(); window.pencil = new Pencil();
@ -28,10 +39,14 @@ window.onload = function(){
} }
window.requestAnimationFrame(update); window.requestAnimationFrame(update);
// Start Preloading! // Go to THE SPLASH
publish("prepreload"); slideshow.gotoChapter("Preloader");
/*
slideshow.gotoChapter("Credits");
$("#navigation").style.display = "block";
*/
} });
subscribe("START", function(){ subscribe("START", function(){
@ -45,11 +60,13 @@ subscribe("START", function(){
$("#navigation").style.display = "block"; $("#navigation").style.display = "block";
// Show Skip Button // Show Skip Button
$("#skip").style.display = "block"; var skippy = $("#skip");
$("#skip").onclick = function(){ skippy.style.display = "block";
skippy.onclick = function(){
publish("sound/button"); publish("sound/button");
slideshow.next(); slideshow.next();
}; };
_stopPropButton(skippy);
// Introduction // Introduction
slideshow.next(); slideshow.next();

View File

@ -10,7 +10,7 @@ function Connection(config){
// Line Sprite // Line Sprite
self.sprite = new Sprite({ self.sprite = new Sprite({
src: "sprites/line.png", img: "line",
frames:1, sw:300, sh:20, frames:1, sw:300, sh:20,
}); });
self.sprite.pivotX = 2.8; self.sprite.pivotX = 2.8;
@ -18,7 +18,7 @@ function Connection(config){
// Dot Sprite // Dot Sprite
self.dotSprite = new Sprite({ self.dotSprite = new Sprite({
src: "sprites/peeps.png", img: "peeps",
frames:6, sw:200, sh:200, frames:6, sw:200, sh:200,
}); });
self.dotSprite.pivotX = 100; self.dotSprite.pivotX = 100;

View File

@ -150,7 +150,7 @@ function Peep(config){
// Body Sprite // Body Sprite
var _initSpriteScale = 0.3; var _initSpriteScale = 0.3;
self.sprite = new Sprite({ self.sprite = new Sprite({
src: "sprites/peeps.png", img: "peeps",
frames:6, sw:200, sh:200, frames:6, sw:200, sh:200,
}); });
self.sprite.pivotX = 100; self.sprite.pivotX = 100;
@ -159,7 +159,7 @@ function Peep(config){
// Prop Sprite // Prop Sprite
self.propSprite = new Sprite({ self.propSprite = new Sprite({
src: "sprites/peeps.png", img: "peeps",
frames:6, sw:200, sh:200, frames:6, sw:200, sh:200,
}); });
self.propSprite.pivotX = 100; self.propSprite.pivotX = 100;

View File

@ -109,6 +109,13 @@ function Simulations(){
} }
// On resize, adjust the fullscreen sim (if any).
window.addEventListener("resize", function(){
if(slideshow.simulations.sims.length>0){
slideshow.simulations.sims[0].resize();
}
}, false);
function Sim(config){ function Sim(config){
var self = this; var self = this;
@ -131,14 +138,12 @@ function Sim(config){
// Canvas // Canvas
if(config.fullscreen){ if(config.fullscreen){
var container = $("#simulations_container"); var container = $("#simulations_container");
var simOffset = _getBoundingClientRect(self.container.dom);
self.canvas = createCanvas(container.clientWidth, container.clientHeight); self.canvas = createCanvas(container.clientWidth, container.clientHeight);
self.canvas.style.left = -simOffset.x;
self.canvas.style.top = -simOffset.y;
}else{ }else{
self.canvas = createCanvas(config.width||500, config.height||500); alert("this code should not run. if it does, something bad has happened.");
/*(self.canvas = createCanvas(config.width||500, config.height||500);
self.canvas.style.left = config.x || 0; self.canvas.style.left = config.x || 0;
self.canvas.style.top = config.y || 0; self.canvas.style.top = config.y || 0;*/
} }
//self.canvas.style.border = "1px solid #ccc"; //self.canvas.style.border = "1px solid #ccc";
self.ctx = self.canvas.getContext('2d'); self.ctx = self.canvas.getContext('2d');
@ -149,6 +154,26 @@ function Sim(config){
// Connector-Cutter // Connector-Cutter
self.connectorCutter = new ConnectorCutter({sim:self}); self.connectorCutter = new ConnectorCutter({sim:self});
// Resize
var simOffset;
self.resize = function(){
var container = $("#simulations_container");
simOffset = _getBoundingClientRect(self.container.dom);
self.canvas.style.left = -simOffset.x;
self.canvas.style.top = -simOffset.y;
// Set difference in width & height
var width = container.clientWidth;
var height = container.clientHeight;
self.canvas.width = width*2;
self.canvas.height = height*2;
self.canvas.style.width = width;
self.canvas.style.height = height;
};
self.resize();
// Networks... clear/init // Networks... clear/init
self.clear = function(){ self.clear = function(){
self.peeps = []; self.peeps = [];
@ -339,7 +364,7 @@ function Sim(config){
// Confetti Sprite // Confetti Sprite
self.confettiSprite = new Sprite({ self.confettiSprite = new Sprite({
src: "sprites/confetti.png", img: "confetti",
frames:3, sw:100, sh:50, frames:3, sw:100, sh:50,
}); });
self.confettiSprite.pivotX = 50; self.confettiSprite.pivotX = 50;

View File

@ -88,12 +88,7 @@ function Boxes(){
}; };
// to prevent sim from resetting... // to prevent sim from resetting...
nextButton.onmousedown = function(event){ _stopPropButton(nextButton);
event.stopPropagation();
};
nextButton.ontouchstart = function(event){
event.stopPropagation();
};
// Replace it in parent! // Replace it in parent!
next.parentNode.replaceChild(nextButton, next); next.parentNode.replaceChild(nextButton, next);
@ -107,6 +102,7 @@ function Boxes(){
publish("reference/show",[id]); publish("reference/show",[id]);
publish("sound/button"); publish("sound/button");
}; };
_stopPropButton(ref);
}); });
// Bonus boxes... // Bonus boxes...
@ -117,6 +113,7 @@ function Boxes(){
publish("bonus/show", [bon.id]); publish("bonus/show", [bon.id]);
publish("sound/button"); publish("sound/button");
}; };
_stopPropButton(bon);
}); });
// Replace icons // Replace icons

View File

@ -48,6 +48,8 @@ window.Modal = {
$("#modal_bg").onclick = Modal.hide; $("#modal_bg").onclick = Modal.hide;
$("#modal_close").onclick = Modal.hide; $("#modal_close").onclick = Modal.hide;
_stopPropButton($("#modal_bg"));
_stopPropButton($("#modal_close"));
// Show big collected modals // Show big collected modals
subscribe("modal/bonus", function(){ subscribe("modal/bonus", function(){

View File

@ -30,6 +30,7 @@ function Navigation(){
publish("sound/button"); publish("sound/button");
slideshow.gotoChapter(chapter); slideshow.gotoChapter(chapter);
}; };
_stopPropButton(nav);
})(nav, chapter); })(nav, chapter);
} }
@ -41,6 +42,7 @@ function Navigation(){
publish("sound/button"); publish("sound/button");
publish("modal/"+modal); publish("modal/"+modal);
}; };
_stopPropButton(nav);
})(nav, modal); })(nav, modal);
} }
@ -105,5 +107,6 @@ function Navigation(){
$("#sound").setAttribute("mute","yes"); $("#sound").setAttribute("mute","yes");
} }
}; };
_stopPropButton($("#sound"));
} }

View File

@ -14,11 +14,11 @@ function Pencil(){
// Sprites // Sprites
self.sprite = new Sprite({ self.sprite = new Sprite({
src: "sprites/pencil.png", img: "pencil",
frames:3, sw:200, sh:200, frames:3, sw:200, sh:200,
}); });
self.toolsSprite = new Sprite({ self.toolsSprite = new Sprite({
src: "sprites/sandbox_tools.png", img: "sandbox_tools",
frames:6, sw:200, sh:200, frames:6, sw:200, sh:200,
}); });
self.sprite.pivotX = self.toolsSprite.pivotX = 0; self.sprite.pivotX = self.toolsSprite.pivotX = 0;

View File

@ -18,15 +18,7 @@ subscribe("prepreload", function(){
],function(progress){ ],function(progress){
if(progress==1){ if(progress==1){
var pre_preloader = $("#pre_preloader"); publish("prepreload/done");
pre_preloader.parentNode.removeChild(pre_preloader);
slideshow.gotoChapter("Preloader");
/*
slideshow.gotoChapter("Credits");
$("#navigation").style.display = "block";
*/
publish("preload"); publish("preload");
} }
}); });

View File

@ -162,6 +162,7 @@ function ChooseOne(config){
self.highlight(buttonDOM); // highlight self.highlight(buttonDOM); // highlight
config.oninput(value); // input config.oninput(value); // input
}; };
_stopPropButton(buttonDOM);
}); });

View File

@ -1,7 +1,12 @@
function Scratch(){ function Scratch(){
var self = this; var self = this;
self.dom = $("#scratch"); self.canvas = $("#scratch");
self.ctx = self.canvas.getContext("2d");
// 711 x 400
var w = 711;
var h = 400;
self.scratchIn = function(){ self.scratchIn = function(){
@ -10,7 +15,7 @@ function Scratch(){
// anim // anim
self.startUpdateLoop(false, function(){ self.startUpdateLoop(false, function(){
self.dom.style.display = "none"; self.canvas.style.display = "none";
}); });
}; };
@ -21,23 +26,32 @@ function Scratch(){
SOUNDS.scratch_in.play(); SOUNDS.scratch_in.play();
// anim // anim
self.dom.style.display = "block"; self.canvas.style.display = "block";
self.startUpdateLoop(true); self.startUpdateLoop(true);
}; };
self.startUpdateLoop = function(out, callback){ self.startUpdateLoop = function(out, callback){
var frame = 0; var frame = 0;
var xOffset = out ? 0 : -100; var xOffset = out ? 0 : w;
var handle = subscribe("update", function(){ var handle = subscribe("update", function(){
var yOffset = Math.floor(frame)*(-100); var yOffset = Math.floor(frame)*h;
self.dom.style.backgroundPosition = xOffset+"% "+yOffset+"%";
// Redraw canvas
self.ctx.clearRect(0, 0, self.canvas.width, self.canvas.height);
self.ctx.drawImage(
IMAGES.scratch,
xOffset, yOffset, w, h,
0, 0, w, h);
// Staaaahhhhhp
if(frame>19){ if(frame>19){
unsubscribe(handle); unsubscribe(handle);
if(callback) callback(); if(callback) callback();
return; return;
} }
frame+=0.5; frame+=0.5;
}); });
}; };

View File

@ -8,12 +8,6 @@ function SimUI(container, color){
var startButton = document.createElement("div"); var startButton = document.createElement("div");
startButton.id = "start_button"; startButton.id = "start_button";
self.container.appendChild(startButton); self.container.appendChild(startButton);
startButton.onmousedown = function(event){
event.stopPropagation();
};
startButton.ontouchstart = function(event){
event.stopPropagation();
};
startButton.onclick = function(event){ startButton.onclick = function(event){
publish("sound/button"); publish("sound/button");
if(!Simulations.IS_RUNNING){ if(!Simulations.IS_RUNNING){
@ -24,6 +18,7 @@ function SimUI(container, color){
publish("sim/stop"); publish("sim/stop");
} }
}; };
_stopPropButton(startButton);
// Update button UI // Update button UI
var _updateButtonUI = function(){ var _updateButtonUI = function(){