mirror of
https://github.com/graphql-python/graphene.git
synced 2024-11-30 05:23:57 +03:00
157 lines
3.8 KiB
JavaScript
157 lines
3.8 KiB
JavaScript
var IN_BROWSER = typeof window != 'undefined';
|
|
import React from 'react';
|
|
var browser_supported;
|
|
if (IN_BROWSER) {
|
|
var isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&
|
|
navigator.userAgent && !navigator.userAgent.match('CriOS');
|
|
var browser_supported = !isSafari;
|
|
}
|
|
if (IN_BROWSER && browser_supported) {
|
|
var glfx = require('../vendor/glfx.optim')
|
|
var particlesJS = require('../vendor/particles.js')
|
|
}
|
|
|
|
class Header extends React.Component {
|
|
update() {
|
|
if (!this.mounted) return;
|
|
var w = this.video.width;
|
|
var h = this.video.height;
|
|
if (window.devicePixelRatio > 1) {
|
|
w = w/2;
|
|
h = h/2;
|
|
}
|
|
this.texture._.initFromCanvas(w, h, this.video);
|
|
|
|
this.canvas.draw(this.texture).tiltShift(0, h*2/3, 10, h*2/3, 15, 200).update();
|
|
requestAnimationFrame(this.update.bind(this));
|
|
}
|
|
componentWillUnmount() {
|
|
this.mounted = false;
|
|
}
|
|
componentDidMount() {
|
|
if (!(IN_BROWSER && browser_supported)) return;
|
|
this.mounted = true;
|
|
new particlesJS('header-background', {
|
|
"particles": {
|
|
"number": {
|
|
"value": 40,
|
|
"density": {
|
|
"enable": true,
|
|
"value_area": 800
|
|
}
|
|
},
|
|
"color": {
|
|
"value": "#ffffff"
|
|
},
|
|
"shape": {
|
|
"type": "circle",
|
|
"stroke": {
|
|
"width": 0,
|
|
"color": "#000000"
|
|
},
|
|
"polygon": {
|
|
"nb_sides": 8
|
|
}
|
|
},
|
|
"opacity": {
|
|
"value": 1,
|
|
"random": true,
|
|
"anim": {
|
|
"enable": true,
|
|
"speed": .1,
|
|
"opacity_min": .1,
|
|
"sync": true
|
|
}
|
|
},
|
|
"size": {
|
|
"value": 2.2,
|
|
"random": false,
|
|
"anim": {
|
|
"enable": false,
|
|
"speed": .2,
|
|
"size_min": 2.44,
|
|
"sync": true
|
|
}
|
|
},
|
|
"line_linked": {
|
|
"enable": true,
|
|
"distance": 240,
|
|
"color": "#ffffff",
|
|
"opacity": .2,
|
|
"width": 3
|
|
},
|
|
"move": {
|
|
"enable": true,
|
|
"speed": 1.1,
|
|
"direction": "none",
|
|
"random": true,
|
|
"straight": false,
|
|
"out_mode": "bounce",
|
|
"bounce": false,
|
|
"attract": {
|
|
"enable": false,
|
|
"rotateX": 600,
|
|
"rotateY": 600
|
|
}
|
|
}
|
|
},
|
|
"interactivity": {
|
|
"detect_on": "canvas",
|
|
"events": {
|
|
"onhover": {
|
|
"enable": true,
|
|
"mode": "repulse"
|
|
},
|
|
"onclick": {
|
|
"enable": true,
|
|
"mode": "repulse"
|
|
},
|
|
"resize": true
|
|
},
|
|
"modes": {
|
|
"grab": {
|
|
"distance": 400,
|
|
"line_linked": {
|
|
"opacity": 1
|
|
}
|
|
},
|
|
"bubble": {
|
|
"distance": 250,
|
|
"size": 0,
|
|
"duration": 2,
|
|
"opacity": 0,
|
|
"speed": 3
|
|
},
|
|
"repulse": {
|
|
"distance": 73.08694910712113,
|
|
"duration": 0.4
|
|
},
|
|
"push": {
|
|
"particles_nb": 4
|
|
},
|
|
"remove": {
|
|
"particles_nb": 2
|
|
}
|
|
}
|
|
},
|
|
"retina_detect": true
|
|
});
|
|
var header_background = document.getElementById('header-background');
|
|
this.canvas = glfx.canvas();
|
|
this.video = header_background.children[0];
|
|
this.context = window.pJSDom[0].pJS.canvas.ctx;
|
|
this.texture = this.canvas.texture(this.video);
|
|
header_background.appendChild(this.canvas);
|
|
requestAnimationFrame(this.update.bind(this));
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<div id="header-background">
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
module.exports = Header;
|