diff --git a/index.html b/index.html index ace1d33..d4a3dd7 100644 --- a/index.html +++ b/index.html @@ -6,51 +6,60 @@ -
-

glitch images

-

drag an image into the browser window to modify it. this script corrupts some bytes in a jpg image. because of the way jpg encoding works, the corrupted file still shows something. inspired by soulwires experiment in flash. this experiment was created by georg. you can follow him on twitter or explore the source code on github.

-

if you like this one, you can check out some of his other javascript experiments.

-
-
-
- - - + + -
- - - - - download bitmap file (.png) -
- - - - - - sorry, something went wrong. maybe try again? +
- + +
+
+

drag an image into the browser window to modify it. this script corrupts some bytes in a jpg image. because of the way jpg encoding works, the corrupted file still shows something. inspired by soulwires experiment in flash. this experiment was created by georg. you can follow him on twitter or explore the source code on github.

+

if you like this one, you can check out some of his other javascript experiments.

+ +
+
diff --git a/scripts/main.js b/scripts/main.js index 40d3f2c..ed519fe 100644 --- a/scripts/main.js +++ b/scripts/main.js @@ -20,6 +20,7 @@ require( 'src/import-button', 'src/random-button', 'src/upload-imgur', + 'src/intro', 'util/feature-test', 'lib/signals-1.0.0' ], @@ -33,6 +34,7 @@ require( import_button, random_button, imgur, + intro, testFeatures, Signal ) @@ -62,6 +64,7 @@ require( image.init( shared ); file.init( shared ); imgur.init( shared ); + intro.init( shared ); } function showError( required_features ) diff --git a/scripts/src/intro.js b/scripts/src/intro.js new file mode 100644 index 0000000..d1b12a3 --- /dev/null +++ b/scripts/src/intro.js @@ -0,0 +1,47 @@ +/*global define*/ +define( + function() + { + var signals; + var is_open = true; + var element = document.querySelectorAll( '.intro' )[0]; + var button = document.querySelectorAll( '.intro-button' )[0]; + var close_button = element.querySelectorAll( '.close' )[0]; + + function init( shared ) + { + signals = shared.signals; + button.addEventListener( 'click', buttonClicked ); + close_button.addEventListener( 'click', close ); + } + + function buttonClicked( event ) + { + if ( is_open ) + { + close(); + } + + else + { + open(); + } + } + + function open() + { + button.classList.add( 'is-active' ); + element.classList.add( 'is-active' ); + is_open = true; + } + + function close() + { + button.classList.remove( 'is-active' ); + element.classList.remove( 'is-active' ); + is_open = false; + } + + return { init: init }; + } +); \ No newline at end of file diff --git a/styles/main.css b/styles/main.css index db4f527..cb5b271 100644 --- a/styles/main.css +++ b/styles/main.css @@ -1,40 +1,59 @@ -* -{ +* { margin: 0; padding: 0; } -body -{ - padding: 50px; +body { font-family: sans-serif; color: #666; line-height: 18px; - font-size: 12px; + font-size: 14px; } -a -{ +a { color: #06f; text-decoration: none; } -a:hover -{ +a:hover { text-decoration: underline; } -.is-hidden -{ +.is-hidden { display: none; } -.button -{ - background-color: #eaeaea; +.full-width { + width: 100%; +} + +.dark-bg { + background-color: #333; +} + +.light-bg { + background-color: #efefef; + border-bottom: 1px #ddd solid; +} + +.center { + max-width: 860px; + margin-left: auto; + margin-right: auto; +} + +.nav-wrapper { + padding-top: 17px; + padding-bottom: 17px; + position: relative; + z-index: 3; +} + +.button { + background-color: #ddd; padding: 5px 9px; display: inline-block; - color: #06f; + color: #666; font-weight: normal; border-radius: 2px; cursor: pointer; @@ -43,223 +62,264 @@ a:hover font-size: 12px; text-decoration: none; line-height: normal; + margin-right: 4px; } -.button:hover -{ +.button:hover { background-color: #06f; color: #fff; text-decoration: none; } -#random-button -{ +.dark-bg .button { + background-color: #666; + color: #ccc; +} + +.dark-bg .button:hover { + background-color: #999; + color: #fff; +} + +.dark-bg a { + color: #ddd; +} + +#random-button { position: relative; - top: 3px; + top: 6px; } -.headline -{ - font-size: 12px; - color: #333; - margin-bottom: 10px; +.headline { + font-size: 16px; + color: #fff; + display: inline-block; + font-weight: normal; + margin-right: 20px; + position: relative; + top: 1px; } -.intro -{ - max-width: 650px; +.intro { + width: 100%; + position: absolute; + top: -100%; + background-color: #fff; + background-color: rgba(255,255,255, 0.9); + -webkit-transition: all 0.5s ease-in; + transition: all 0.5s ease-in; } -#controls -{ - float: left; - margin-top: 30px; +.intro.is-active { + top: 0; +} + +.intro .center { + padding: 30px; + max-width: 580px; + position: relative; +} + +.intro .close { + position: absolute; + top: 10px; + right: 10px; + display: block; + font-size: 16px; + background-color: transparent; + border: none; + color: #06f; +} + +.intro-button { + font-size: 17px; + padding-top: 0px; + padding-bottom: 3px; + float: right; +} + +.intro-button.is-active, +.intro-button.is-active:hover { + background-color: #ddd; + color: #666; +} + +#controls { display: none; } -#controls.is-active -{ +#controls.is-active { display: block; } - .control-wrapper - { - float: left; - width: 200px; - margin-right: 20px; - } +.control-wrapper { + display: inline-block; + width: 160px; + margin-right: 20px; +} - .control-label - { - display: block; - color: #666; - } +.control-label { + font-size: 11px; + display: block; + color: #666; + text-align: center; + max-width: 120px; +} - .control-slider - { - display: block; - float: left; - border: none; - width: 160px; - height: 1px; - margin-top: 6px; - background: #ddd; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - } +.control-slider { + display: block; + float: left; + border: none; + width: 120px; + height: 1px; + margin-top: 6px; + background: #ddd; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} - .control-number - { - display: block; - color: #333; - float: right; - border: none; - max-width: 30px; - font-family: sans-serif; - } +.control-number { + display: block; + color: #333; + float: right; + border: none; + max-width: 30px; + font-family: sans-serif; + background-color: transparent; +} -#import-input -{ +#import-input { display: none; } -.export-wrapper -{ - clear: both; - float: left; - margin-top: 30px; +.download-link { + display: none; } - .download-link - { - display: none; - } +.download-link.is-active { + display: inline-block; + margin-left: 15px; +} - .download-link.is-active - { - display: inline-block; - margin-left: 15px; - } +.download-link span { + color: #999; + display: inline-block; + text-decoration: none; + margin-left: 4px; +} - .download-link span - { - color: #999; - display: inline-block; - text-decoration: none; - margin-left: 4px; - } - -#imgur-button -{ +#imgur-button { width: 85px; } #imgur-button.is-uploading, -#imgur-button.is-uploading:hover -{ - background-color: #eaeaea; - color: #06f; +#imgur-button.is-uploading:hover { + background-color: #ddd; + color: #666; cursor: default; } - #imgur-button span - { - display: block; - width: 154px; - transition: margin-left 0.5s ease-in; - transition-property: margin-left top; - text-align: left; - overflow: hidden; - } +#imgur-button span { + display: block; + width: 154px; + -webkit-transition: margin-left 0.5s ease-in; + transition: margin-left 0.5s ease-in; + -webkit-transition-property: margin-left top; + transition-property: margin-left top; + text-align: left; + overflow: hidden; +} +#imgur-button.is-uploading span { + margin-left: -76px; +} - #imgur-button.is-uploading span - { - margin-left: -76px; - } +#imgur-button span::after { + content: 'loading…'; + display: inline-block; + padding-left: 15px; + color: #999; +} - #imgur-button span::after - { - content: 'loading…'; - display: inline-block; - padding-left: 15px; - color: #999; - } - -#imgur-url-container -{ +#imgur-url-container { display: inline-block; opacity: 0; + -webkit-transition: opacity 0.3s ease-in; transition: opacity 0.3s ease-in; } -#imgur-url-container.is-active -{ +#imgur-url-container.is-active { opacity: 1; } - #imgur-url-input - { - padding: 4px 9px; - border: 1px #CCC solid; - border-radius: 3px; - font-family: sans-serif; - font-size: 13px; - color: #7C7C7C; - } +#imgur-url-input { + padding: 5px 9px 4px 9px; + border: none; + border-radius: 2px; + font-family: sans-serif; + font-size: 13px; + color: #333; + margin-right: 7px; + position: relative; + top: 1px; +} - #imgur-url-error - { - padding: 5px 9px; - line-height: normal; - color: #999; - } +#imgur-url-error { + padding: 5px 9px; + line-height: normal; + color: #999; +} - #imgur-url-input, - #imgur-url-link, - #imgur-url-error - { - display: none; - } - - #imgur-url-container.upload-successful #imgur-url-input, - #imgur-url-container.upload-successful #imgur-url-link - { - display: inline-block; - } - - #imgur-url-container.upload-failed #imgur-url-error - { - display: inline-block; - } - -.social-link -{ +#imgur-url-input, +#imgur-url-link, +#imgur-url-error { display: none; } - .upload-successful .social-link - { - display: inline-block; +#imgur-url-container.upload-successful #imgur-url-input, +#imgur-url-container.upload-successful #imgur-url-link { + display: inline-block; +} + +#imgur-url-container.upload-failed #imgur-url-error { + display: inline-block; +} + +.social-link { + display: none; +} + +.upload-successful .social-link { + display: inline-block; +} + +.missing-feature { + clear: both; +} + +.canvas-wrapper { + width: 100%; + margin-top: 30px; + position: relative; + background-color: rgba(255, 255, 255, 0.9); + line-height: 1.7; +} + +#canvas { + margin-left: auto; + margin-right: auto; + display: block; + max-width: 100%; +} + +@media all and (max-width: 860px) { + .nav-wrapper { + text-align: center; } - -.missing-feature -{ - clear: both; -} - -.canvas-wrapper -{ - width: 100%; - clear: both; - float: left; - margin-top: 30px; - -} - #canvas - { - display: block; - max-width: 100%; - } \ No newline at end of file + .center { + padding-left: 10px; + padding-right: 10px; + } +} \ No newline at end of file