Repository: codrops/ScrollSpiral
Branch: master
Commit: 3889131fea11
Files: 23
Total size: 73.6 KB
Directory structure:
gitextract_uisuplp9/
├── .gitignore
├── README.md
├── css/
│ ├── demo.css
│ └── normalize.css
├── index.html
├── index2.html
├── index3.html
├── index4.html
├── index5.html
├── index6.html
├── index7.html
├── index8.html
├── index9.html
├── js/
│ ├── demo1.js
│ ├── demo2.js
│ ├── demo3.js
│ ├── demo4.js
│ ├── demo5.js
│ ├── demo6.js
│ ├── demo7.js
│ ├── demo8.js
│ └── demo9.js
└── psd/
└── gradient_map.psd
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.DS_Store
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# Windows shortcuts
*.lnk
# Dropbox settings and caches
.dropbox
.dropbox.attr
.dropbox.cache
================================================
FILE: README.md
================================================
# WebGL Scroll Spiral
Some decorative background scroll effects for websites using WebGL and regl. By Xoihazard.

[Article on Codrops](https://tympanus.net/codrops/?p=30761)
[Demo](https://tympanus.net/Development/ScrollSpiral/)
## Credits
- [Official regl website](http://regl.party)
- Images copyright by [RuleByArt](https://creativemarket.com/RuleByArt?u=codrops). Purchase on Creative Market: [Flight](https://creativemarket.com/RuleByArt/468537-Flight?u=codrops) and [Surface Shapes](https://creativemarket.com/RuleByArt/32279-Surface-Shapes?u=codrops)
## License
This resource can be used freely if integrated or build upon in personal or commercial projects such as websites, web apps and web templates intended for sale. It is not allowed to take the resource "as-is" and sell it, redistribute, re-publish it, or sell "pluginized" versions of it. Free plugins built using this resource should have a visible mention and link to the original work. Always consider the licenses of all included libraries, scripts and images used.
## Misc
Follow Codrops: [Twitter](http://www.twitter.com/codrops), [Facebook](http://www.facebook.com/codrops), [Google+](https://plus.google.com/101095823814290637419), [GitHub](https://github.com/codrops), [Pinterest](http://www.pinterest.com/codrops/), [Instagram](https://www.instagram.com/codropsss/)
[© Codrops 2017](http://www.codrops.com)
================================================
FILE: css/demo.css
================================================
*,
*::after,
*::before {
box-sizing: border-box;
}
body {
font-family: 'Roboto Mono', monospace;
color: #fff;
background: #000;
}
a {
text-decoration: none;
color: #fff;
outline: none;
}
a:hover,
a:focus {
color: #fff;
}
.hidden {
position: absolute;
overflow: hidden;
width: 0;
height: 0;
pointer-events: none;
}
/* Overlay */
main::before {
content: '';
position: fixed;
z-index: -1;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
background: rgba(0,0,0,0.4);
}
/* Icons */
.icon {
display: block;
width: 1.5em;
height: 1.5em;
margin: 0 auto;
fill: currentColor;
}
/* Page Loader */
.js .loading::before {
content: '';
position: fixed;
z-index: 1000;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #000;
}
.js .loading::after {
content: '';
position: fixed;
z-index: 1001;
top: 50%;
left: 50%;
width: 50px;
height: 50px;
margin: -25px 0 0 -25px;
pointer-events: none;
border-radius: 50%;
background: #3b3b3b;
animation: loaderAnim 0.8s ease-out infinite alternate forwards;
}
@keyframes loaderAnim {
to {
transform: scale3d(0.5,0.5,1);
}
}
.content {
display: flex;
flex-wrap: wrap;
min-height: 100vh;
}
.content--main {
min-height: 500vh;
}
.content--main::before,
.content--main::after {
position: fixed;
left: 50%;
}
.content--main::before {
content: '';
bottom: 3em;
height: 1.5em;
width: 1px;
background: #fff;
}
.content--main::after {
content: 'Scroll';
position: fixed;
bottom: 0;
width: 6em;
text-align: center;
margin: 0 0 1.5em -3em;
font-size: 0.75em;
text-transform: uppercase;
letter-spacing: 2px;
text-indent: 2px;
}
.content--header {
position: relative;
z-index: 11;
align-items: flex-start;
width: 100%;
padding: 1.5em;
}
.content__top {
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
width: 100%;
}
.main-title {
font-size: 1em;
font-weight: normal;
margin: 0;
padding: 0;
}
.main-tagline {
font-size: 0.865em;
margin: 0 1em;
opacity: 0.8;
}
.main-tagline::before,
.main-tagline::after {
content: ' // ';
}
.github {
font-size: 0.865em;
}
/* Top Navigation Style */
.codrops-links {
position: relative;
display: flex;
justify-content: center;
margin: 0 0 0 auto;
text-align: center;
white-space: nowrap;
}
.codrops-icon {
display: inline-block;
margin: 0.25em;
padding: 0.5em;
}
/* Demo links */
.demos {
position: fixed;
top: 6em;
left: 0;
display: flex;
flex-direction: column;
align-items: flex-start;
padding: 0 1.25em;
}
.demo {
font-size: 0.865em;
position: relative;
margin: 0 1em 0.5em 0;
padding: 0 0 0.25em 0.25em;
white-space: nowrap;
}
.demo:hover,
.demo--current {
text-decoration: underline;
}
/* Related demos */
.content--related {
position: relative;
z-index: 10;
justify-content: center;
padding: 3em 1.5em;
text-align: center;
background: #000;
align-content: center;
}
.content--related a,
.github {
text-decoration: underline;
}
.content--related a:hover,
.content--related a:focus,
.github:hover,
.github:focus {
text-decoration: none;
}
.content__text {
font-size: 0.865em;
font-weight: normal;
width: 100%;
margin: 0 0 1em 0;
}
.content__text:first-child {
margin: 0 0 5em 0;
}
.media-item {
display: inline-block;
padding: 1em;
vertical-align: top;
transition: color 0.3s;
}
.media-item__img {
max-width: 100%;
opacity: 0.6;
transition: opacity 0.3s;
}
.media-item:hover .media-item__img,
.media-item:focus .media-item__img {
opacity: 1;
}
.media-item__title {
font-size: 0.865em;
font-weight: normal;
max-width: 200px;
margin: 0;
padding: 0.5em;
}
#webgl {
position: fixed;
z-index: -1;
top: 0;
left: 0;
display: block;
width: 100vw;
height: 100vh;
}
/* Colors for demos */
/* Demo 2 */
.demo-2 {
background: #5ae6ae;
}
.demo-2 main::before {
background: rgba(60, 145, 110, 0.3);
}
.demo-2 .content--related {
background: #5ae6ae;
}
/* Demo 3 */
.demo-3 {
background: #d8d9cd;
}
.demo-3 main::before {
background: rgba(169, 175, 66, 0.3);
}
.demo-3 .content--related {
background: #d8d9cd;
}
/* Demo 4 */
.demo-4 {
background: #babed1;
}
.demo-4 main::before {
background: rgba(175, 179, 194, 0.3);
}
.demo-4 .content--related {
background: #babed1;
}
/* Demo 5 */
.demo-5 {
background: #000;
}
.demo-5 main::before {
background: rgba(0,0,0,0.4);
}
.demo-5 .content--related {
background: #000;
}
/* Demo 6 */
.demo-6 {
background: #e8dac5;
}
.demo-6 main::before {
background: rgba(0, 0, 0, 0.3);
}
.demo-6 .content--related {
background: #e8dac5;
}
/* Demo 7 */
.demo-7 {
background: #000;
}
.demo-7 main::before {
background: rgba(0, 0, 0, 0.6);
}
.demo-7 .content--related {
background: #000;
}
/* Demo 8 */
.demo-8 {
background: #232121;
}
.demo-8 main::before {
background: rgba(84, 115, 243, 0.3);
}
.demo-8 .content--related {
background: #232121;
}
/* Demo 9 */
.demo-9 {
background: #232121;
}
.demo-9 main::before {
background: rgba(0, 0, 0, 0.3);
}
.demo-9 .content--related {
background: #2a2acf;
}
@media screen and (max-width: 40em) {
.content--header {
padding: 1em 0.5em 0;
}
.content__top {
display: block;
text-align: center;
}
.main-tagline {
margin: 0;
}
.demos {
position: relative;
width: 100%;
margin: 0;
padding: 0.5em;
transform: none;
top: auto;
display: block;
}
}
================================================
FILE: css/normalize.css
================================================
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}audio,canvas,video{display:inline-block;}audio:not([controls]){display:none;height:0;}[hidden]{display:none;}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;}body{margin:0;}a:focus{outline:thin dotted;}a:active,a:hover{outline:0;}h1{font-size:2em;margin:0.67em 0;}abbr[title]{border-bottom:1px dotted;}b,strong{font-weight:bold;}dfn{font-style:italic;}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;}mark{background:#ff0;color:#000;}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em;}pre{white-space:pre-wrap;}q{quotes:"\201C" "\201D" "\2018" "\2019";}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sup{top:-0.5em;}sub{bottom:-0.25em;}img{border:0;}svg:not(:root){overflow:hidden;}figure{margin:0;}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em;}legend{border:0;padding:0;}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0;}button,input{line-height:normal;}button,select{text-transform:none;}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}button[disabled],html input[disabled]{cursor:default;}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}textarea{overflow:auto;vertical-align:top;}table{border-collapse:collapse;border-spacing:0;}
================================================
FILE: index.html
================================================
WebGL Scroll Spiral | Demo 1 | Codrops
================================================
FILE: index2.html
================================================
WebGL Scroll Spiral | Demo 2 | Codrops
================================================
FILE: index3.html
================================================
WebGL Scroll Spiral | Demo 2 | Codrops
================================================
FILE: index4.html
================================================
WebGL Scroll Spiral | Demo 2 | Codrops
================================================
FILE: index5.html
================================================
WebGL Scroll Spiral | Demo 2 | Codrops
================================================
FILE: index6.html
================================================
WebGL Scroll Spiral | Demo 3 | Codrops
================================================
FILE: index7.html
================================================
WebGL Scroll Spiral | Demo 3 | Codrops
================================================
FILE: index8.html
================================================
WebGL Scroll Spiral | Demo 3 | Codrops
================================================
FILE: index9.html
================================================
WebGL Scroll Spiral | Demo 1 | Codrops
================================================
FILE: js/demo1.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity')
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 512 * aspect;
canvas.height = 512;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
}();
================================================
FILE: js/demo2.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// Initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Loading a texture
var img = new Image();
img.src = 'img/img1.jpg';
img.onload = function() {
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity'),
texture: regl.texture(img)
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 1024 * aspect;
canvas.height = 1024;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll Velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
};
}();
================================================
FILE: js/demo3.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// Initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Loading a texture
var img = new Image();
img.src = 'img/img2.jpg';
img.onload = function() {
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity'),
texture: regl.texture(img)
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 1024 * aspect;
canvas.height = 1024;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll Velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
};
}();
================================================
FILE: js/demo4.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// Initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Loading a texture
var img = new Image();
img.src = 'img/img3.jpg';
img.onload = function() {
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity'),
texture: regl.texture(img)
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 1024 * aspect;
canvas.height = 1024;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll Velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
};
}();
================================================
FILE: js/demo5.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// Initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Loading a texture
var img = new Image();
img.src = 'img/img4.jpg';
img.onload = function() {
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity'),
texture: regl.texture(img)
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 1024 * aspect;
canvas.height = 1024;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll Velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
};
}();
================================================
FILE: js/demo6.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Loading a texture
var img = new Image();
img.src = 'img/gradient_map1.png';
img.onload = function() {
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity'),
gradient: regl.texture(img)
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 768 * aspect;
canvas.height = 768;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll Velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
};
}();
================================================
FILE: js/demo7.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Loading a texture
var img = new Image();
img.src = 'img/gradient_map2.png';
img.onload = function() {
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity'),
gradient: regl.texture(img)
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 768 * aspect;
canvas.height = 768;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll Velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
};
}();
================================================
FILE: js/demo8.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Loading a texture
var img = new Image();
img.src = 'img/gradient_map3.png';
img.onload = function() {
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity'),
gradient: regl.texture(img)
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 768 * aspect;
canvas.height = 768;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll Velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
};
}();
================================================
FILE: js/demo9.js
================================================
!function() {
'use strict';
var canvas = document.querySelector('#webgl');
// Scroll variables
var scroll = 0.0, velocity = 0.0, lastScroll = 0.0;
// initialize REGL from a canvas element
var regl = createREGL({
canvas: canvas,
onDone: function(error, regl) {
if (error) { alert(error); }
}
});
// Create a REGL draw command
var draw = regl({
frag: document.querySelector('#fragmentShader').textContent,
vert: 'attribute vec2 position; void main() { gl_Position = vec4(3.0 * position, 0.0, 1.0); }',
attributes: { position: [-1, 0, 0, -1, 1, 1] },
count: 3,
uniforms: {
globaltime: regl.prop('globaltime'),
resolution: regl.prop('resolution'),
aspect: regl.prop('aspect'),
scroll: regl.prop('scroll'),
velocity: regl.prop('velocity')
}
});
// Hook a callback to execute each frame
regl.frame(function(ctx) {
// Resize a canvas element with the aspect ratio (100vw, 100vh)
var aspect = canvas.scrollWidth / canvas.scrollHeight;
canvas.width = 512 * aspect;
canvas.height = 512;
// Scroll amount (0.0 to 1.0)
scroll = window.pageYOffset / (document.documentElement.scrollHeight - window.innerHeight);
// Scroll Velocity
// Inertia example:
// velocity = velocity * 0.99 + (scroll - lastScroll);
// lastScroll = scroll;
// Clear the draw buffer
regl.clear({ color: [0, 0, 0, 0] });
// Execute a REGL draw command
draw({
globaltime: ctx.time,
resolution: [ctx.viewportWidth, ctx.viewportHeight],
aspect: aspect,
scroll: scroll,
velocity: velocity
});
});
setTimeout(function() { document.body.classList.remove('loading');}, 1000);
}();