/****************************************************************** @ Item Gravity // Coming Soon - Under Construction @ Version 3.6 @ Author Avanzare @ Website http://themeforest.net/user/avanzare ******************************************************************/ /****************************************************************** ------------------------ -- TABLE OF CONTENTS -- ------------------------ -- 1. Backgrounds -- 2. Effects -- 3. Cycle ******************************************************************/ /** 1. BACKGROUNDS *******************************************************************/ $(document).ready(function(){ "use strict"; // IMAGE BACKGROUND FUNCTION function imageBackground() { // INIT VEGAS SLIDESHOW PLUGIN $(".bg-image").vegas({ slides: option_hero_background_image_path, delay: 6000, transitionDuration: 800, timer: false, }); } // SLIDER BACKGROUND FUNCTION function sliderBackground() { // INIT VEGAS SLIDESHOW PLUGIN $(".bg-image").vegas({ slides: option_hero_background_slider_path, transition: option_hero_background_slider_transition, delay: option_hero_background_slider_delay, transitionDuration: option_hero_background_slider_transitionDuration, firstTransitionDuration: 1, timer: false, walk: function (index, slideSettings) { $("#cycle").cycle("next");} }); } // KENBURNS SLIDER BACKGROUND FUNCTION function kenburnsBackground() { // INIT VEGAS SLIDESHOW PLUGIN $(".bg-image").vegas({ slides: option_hero_background_kenburns_path, transition: option_hero_background_kenburns_transition, delay: option_hero_background_kenburns_delay, transitionDuration: option_hero_background_kenburns_transitionDuration, firstTransitionDuration: 1, timer: false, animation: "kenburns", walk: function (index, slideSettings) {$("#cycle").cycle("next");} }); } // YOUTUBE BACKGROUND FUNCTION function youtubeBackground() { // CONVERT OPTION MUTE if ( option_hero_background_youtube_controls === "on" ) { $(".hero .front-content").append('
'); } // CONVERT OPTION if (option_hero_background_youtube_mute === "on" ) { option_hero_background_youtube_mute = true; $(".volume-button").removeClass("fa-volume-up").addClass("fa-volume-off"); } // CONVERT OPTION MUTE if ( option_hero_background_youtube_mute === "off" ) { option_hero_background_youtube_mute = false; } // CONVERT OPTION LOOP if ( option_hero_background_youtube_loop === "off" ) { option_hero_background_youtube_loop = false; } else { option_hero_background_youtube_loop = true; } // INIT YOUTUBE BACKGROUND VIDEO PLUGIN $(".hero .bg-video").append('
'); $(".hero #bg-youtube").attr('data-property', '{videoURL:option_hero_background_youtube_url,containment:".bg-video",autoPlay:true,mute:option_hero_background_youtube_mute,startAt: option_hero_background_youtube_startPoint,stopAt: option_hero_background_youtube_endPoint,loop: option_hero_background_youtube_loop,opacity:1,stopMovieOnBlur:false,showControls:false}'); // INIT YOUTUBE BACKGROUND VIDEO PLUGIN $(".player").mb_YTPlayer(); // SHOW PLAYER CONTROLS $(".hero .controls").addClass("show"); // PLAYER SOUND CONTROLLER $(".volume-button").click(function() { if($("#bg-youtube").hasClass("isMuted")) { $("#bg-youtube").YTPUnmute(); $( ".volume-button" ).removeClass("fa-volume-off").addClass("fa-volume-up"); } else { $("#bg-youtube").YTPMute(); $(".volume-button").removeClass("fa-volume-up").addClass("fa-volume-off"); } }); var stBtnCheck = true; // DO SOMETHING WHEN PLAYER IS PAUSED $("#bg-youtube").on("YTPPause",function(){ stBtnCheck = false; }); // DO SOMETHING WHEN PLAYER IS PLAYING $("#bg-youtube").on("YTPPlay",function(){ stBtnCheck = true; }); // PAUSE PLAYER ON CLICK $( ".pause-button" ).click(function() { if (stBtnCheck == true) { $("#bg-youtube").YTPPause(); $( ".pause-button" ).removeClass("ti-control-pause").addClass("ti-control-play"); } else { $("#bg-youtube").YTPPlay(); $( ".pause-button" ).removeClass("ti-control-play").addClass("ti-control-pause"); } }); } // SOLID COLOR BACKGROUND FUNCTION function colorBackground() { // UPDATE COLOR $(".hero .level-2").css("background",option_hero_background_color_custom_color); $(".hero .level-2").children().remove(); $(".hero .bg-color").css("opacity","1"); // REMOVE PATTERN AND OVERLAY $(".hero .bg-pattern").remove(); $(".hero .bg-overlay").remove(); } // GRADIENT BACKGROUND FUNCTION function gradientBackground() { // COLOR ARRAY var colors = option_hero_background_gradient_colorArray; var step = 0; var selector = $(".bg-color"); //COLOR TABLE: var colorIndices = [0,1,2,3]; //TRANSITION SPEED var gradientSpeed = option_hero_background_gradient_stransitionSpeed/10000; function updateGradient() { var c0_0 = colors[colorIndices[0]]; var c0_1 = colors[colorIndices[1]]; var c1_0 = colors[colorIndices[2]]; var c1_1 = colors[colorIndices[3]]; var istep = 1 - step; var r1 = Math.round(istep * c0_0[0] + step * c0_1[0]); var g1 = Math.round(istep * c0_0[1] + step * c0_1[1]); var b1 = Math.round(istep * c0_0[2] + step * c0_1[2]); var color1 = "rgb("+r1+","+g1+","+b1+")"; var r2 = Math.round(istep * c1_0[0] + step * c1_1[0]); var g2 = Math.round(istep * c1_0[1] + step * c1_1[1]); var b2 = Math.round(istep * c1_0[2] + step * c1_1[2]); var color2 = "rgb("+r2+","+g2+","+b2+")"; selector.css({ background: "-webkit-gradient(linear, left top, right top, from("+color1+"), to("+color2+"))"}).css({ background: "-moz-linear-gradient(left, "+color1+" 0%, "+color2+" 100%)"}); step += gradientSpeed; if ( step >= 1 ) { step %= 1; colorIndices[0] = colorIndices[1]; colorIndices[2] = colorIndices[3]; colorIndices[1] = ( colorIndices[1] + Math.floor( 1 + Math.random() * (colors.length - 1))) % colors.length; colorIndices[3] = ( colorIndices[3] + Math.floor( 1 + Math.random() * (colors.length - 1))) % colors.length; } } setInterval(updateGradient,1); // SHOW BG COLOR ELEMENT $(".hero .bg-color").css("opacity","1"); // REMOVE PATTERN AND OVERLAY $(".hero .bg-pattern").remove(); $(".hero .bg-overlay").remove(); } // CANVAS SPHERE BACKGROUND FUNCTION function canvasSphereBackground() { // Z-INDEX CORRECTION BACKGROUND OVERLAY $(".hero .background-content .bg-overlay").css("z-index","2"); // THREE.JS BASED var SCREEN_WIDTH = $(".hero .level-1").width(), SCREEN_HEIGHT = $(".hero .level-1").height(), mouseX = 0, mouseY = 0, windowHalfX = window.innerWidth / 2, windowHalfY = window.innerHeight / 2, camera, scene, renderer; init(); animate(); function init() { var container, separation = 100, amountX = 50, amountY = 50, particles, particle; container = document.createElement("div"); document.getElementById("canvas").appendChild(container); camera = new THREE.PerspectiveCamera( 75, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 ); camera.position.z = option_hero_background_sphere_distance; scene = new THREE.Scene(); renderer = new THREE.CanvasRenderer(); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); container.appendChild( renderer.domElement ); renderer.setClearColor( option_hero_background_sphere_background_color ); var PI2 = Math.PI * 2; var material = new THREE.SpriteCanvasMaterial( { color: option_hero_background_sphere_dot_color, program: function ( context ) { context.beginPath(); context.arc( 0, 0, 0.5, 0, PI2, true ); context.fill(); } } ); for ( var i = 0; i < 1000; i ++ ) { particle = new THREE.Sprite( material ); particle.position.x = Math.random() * 2 - 1; particle.position.y = Math.random() * 2 - 1; particle.position.z = Math.random() * 2 - 1; particle.position.normalize(); particle.position.multiplyScalar( Math.random() * 10 + 450 ); particle.scale.multiplyScalar( 2 ); scene.add( particle ); } for (var i = 0; i < 300; i++) { var geometry = new THREE.Geometry(); var vertex = new THREE.Vector3( Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1 ); vertex.normalize(); vertex.multiplyScalar( 450 ); geometry.vertices.push( vertex ); var vertex2 = vertex.clone(); vertex2.multiplyScalar( Math.random() * 0.3 + 1 ); geometry.vertices.push( vertex2 ); var line = new THREE.Line( geometry, new THREE.LineBasicMaterial( { color: option_hero_background_sphere_line_color, opacity: Math.random() } ) ); scene.add( line ); } document.addEventListener( "mousemove", onDocumentMouseMove, false ); document.addEventListener( "touchstart", onDocumentTouchStart, false ); document.addEventListener( "touchmove", onDocumentTouchMove, false ); window.addEventListener( "resize", onWindowResize, false ); } function onWindowResize() { var SCREEN_WIDTH = $(".hero .level-1").width(), SCREEN_HEIGHT = $(".hero .level-1").height(); windowHalfX = SCREEN_WIDTH / 2; windowHalfY = SCREEN_HEIGHT / 2; camera.aspect = SCREEN_WIDTH / SCREEN_HEIGHT; camera.updateProjectionMatrix(); renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); } function onDocumentMouseMove(event) { mouseX = event.clientX - windowHalfX; mouseY = event.clientY - windowHalfY; } function onDocumentTouchStart( event ) { if ( event.touches.length > 1 ) { event.preventDefault(); mouseX = event.touches[ 0 ].pageX - windowHalfX; mouseY = event.touches[ 0 ].pageY - windowHalfY; } } function onDocumentTouchMove( event ) { if ( event.touches.length === 1 ) { event.preventDefault(); mouseX = event.touches[ 0 ].pageX - windowHalfX; mouseY = event.touches[ 0 ].pageY - windowHalfY; } } function animate() { requestAnimationFrame( animate ); render(); } function render() { if (lem) { camera.position.x += ( mouseX - camera.position.x ) * 0.05; camera.position.y += ( - mouseY + 200 - camera.position.y ) * 0.05; camera.lookAt( scene.position ); scene.rotation.y += option_hero_background_sphere_rotation_speed / 100; renderer.render( scene, camera ); } } var lem = true; $( document ).scroll(function() { if ( $(this).scrollTop() > $(window).height() ){ lem = false; } else { lem = true; } }); } // CANVAS WAVES BACKGROUND FUNCTION function canvasWavesBackground() { // Z-INDEX CORRECTION BACKGROUND OVERLAY $(".hero .background-content .bg-overlay").css("z-index","2"); // THREE.JS BASED var SEPARATION = option_hero_background_waves_dotSpacing, AMOUNTX = option_hero_background_waves_dotAmountX, AMOUNTY = option_hero_background_waves_dotAmountY; var SCREEN_WIDTH = $(".hero .level-1").width(), SCREEN_HEIGHT = $(".hero .level-1").height(); var container; var camera, scene, renderer; var particles, particle, count = 0; var mouseX = 0, mouseY = 0; var windowHalfX = SCREEN_WIDTH / 2; var windowHalfY = SCREEN_HEIGHT / 2; init(); animate(); function init() { container = document.createElement("div"); document.getElementById("canvas").appendChild(container); camera = new THREE.PerspectiveCamera( 75, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000 ); camera.position.z = option_hero_background_waves_distance; scene = new THREE.Scene(); particles = new Array(); var PI2 = Math.PI * 2; var material = new THREE.SpriteCanvasMaterial( { color: option_hero_background_waves_dot_color, program: function ( context ) { context.beginPath(); context.arc( 0, 0, 0.5, 0, PI2, true ); context.fill(); } } ); var i = 0; for ( var ix = 0; ix < AMOUNTX; ix ++ ) { for ( var iy = 0; iy < AMOUNTY; iy ++ ) { particle = particles[ i ++ ] = new THREE.Sprite( material ); particle.position.x = ix * SEPARATION - ( ( AMOUNTX * SEPARATION ) / 2 ); particle.position.z = iy * SEPARATION - ( ( AMOUNTY * SEPARATION ) / 2 ); scene.add( particle ); } } renderer = new THREE.CanvasRenderer(); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); container.appendChild( renderer.domElement ); renderer.setClearColor( option_hero_background_waves_background_color ); document.addEventListener( "mousemove", onDocumentMouseMove, false ); document.addEventListener( "touchstart", onDocumentTouchStart, false ); document.addEventListener( "touchmove", onDocumentTouchMove, false ); window.addEventListener( "resize", onWindowResize, false ); } function onWindowResize() { var SCREEN_WIDTH = $(".hero .level-1").width(), SCREEN_HEIGHT = $(".hero .level-1").height(); windowHalfX = SCREEN_WIDTH / 2; windowHalfY = SCREEN_HEIGHT / 2; camera.aspect = SCREEN_WIDTH / SCREEN_HEIGHT; camera.updateProjectionMatrix(); renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); } function onDocumentMouseMove( event ) { mouseX = event.clientX - windowHalfX; mouseY = event.clientY - windowHalfY; } function onDocumentTouchStart( event ) { if ( event.touches.length > 1 ) { event.preventDefault(); mouseX = event.touches[ 0 ].pageX - windowHalfX; mouseY = event.touches[ 0 ].pageY - windowHalfY; } } function onDocumentTouchMove( event ) { if ( event.touches.length === 1 ) { event.preventDefault(); mouseX = event.touches[ 0 ].pageX - windowHalfX; mouseY = event.touches[ 0 ].pageY - windowHalfY; } } function animate() { requestAnimationFrame( animate ); render(); } function render() { if (lem) { camera.position.x += ( mouseX - camera.position.x ) * 0.05; camera.position.y += ( - mouseY - camera.position.y ) * 0.05; camera.lookAt( scene.position ); var i = 0; for ( var ix = 0; ix < AMOUNTX; ix ++ ) { for ( var iy = 0; iy < AMOUNTY; iy ++ ) { particle = particles[ i++ ]; particle.position.y = ( Math.sin( ( ix + count ) * 0.3 ) * 50 ) + ( Math.sin( ( iy + count ) * 0.5 ) * 50 ); particle.scale.x = particle.scale.y = ( Math.sin( ( ix + count ) * 0.3 ) + 1 ) * 4 + ( Math.sin( ( iy + count ) * 0.5 ) + 1 ) * 4; } } renderer.render( scene, camera ); count += 0.1; } } // PAUSE WHEN NOT IN VIEWPORT var lem = true; $( document ).scroll(function() { if ( $(this).scrollTop() > $(window).height() ){ lem = false; } else { lem = true; } }); } // CANVAS MESH BACKGROUND FUNCTION function meshBackground() { var c, ctx, w, h, spacing, spread, basePoint, rightPoint, botPoint, mouse, mouseMoved, cols, rows, points, tick; function Point( opt ) { this.x = opt.x; this.y = opt.y; this.xBase = this.x; this.yBase = this.y; this.offset = rand( 0, 1000 ); this.duration = rand( 20, 60 ); this.range = rand( 5, 5 ); this.dir = rand( 0, 1 ) > 0.5 ? 1 : -1; this.rad = rand( 2, 4 ); } Point.prototype.step = function() { this.x = this.xBase + this.dir * Math.sin( ( tick + this.offset ) / this.duration ) * this.range; this.y = this.yBase + this.dir * Math.cos( ( tick + this.offset ) / this.duration ) * this.range; var angle = angleTo( this, mouse ); this.x = this.x + Math.cos( angle ) * 100; this.y = this.y + Math.sin( angle ) * 100; }; function rand( min, max ) { return Math.random() * ( max - min ) + min; } function dist( p1, p2 ) { var dx = p1.x - p2.x, dy = p1.y - p2.y; return Math.sqrt( dx * dx + dy * dy ); } function angleTo( p1, p2 ) { var dx = p1.x - p2.x, dy = p1.y - p2.y; return Math.atan2( dy, dx ); } function init() { c = document.createElement( 'canvas' ); ctx = c.getContext( '2d' ); mouse = { x: 0, y: 0 }; points = []; spacing = 180; spread = spacing * 0.25; document.getElementById("canvas").appendChild( c ); reset(); loop(); } function reset() { w = $(".hero .level-1").width(); h = $(".hero .level-1").height(); c.width = w; c.height = h; mouse.x = w / 2; mouse.y = h / 2; mouseMoved = false; cols = 0; rows = 0; points.length = 0; tick = 0; create(); ctx.strokeStyle = option_hero_background_mesh_color; ctx.lineWidth = 2; } function create() { for( var x = -spacing / 2; x < w + spacing; x += spacing ) { cols++; for( var y = -spacing / 2; y < h + spacing; y += spacing ) { if( x == -spacing / 2 ) { rows++; } points.push( new Point({ x: ~~( x + rand( -spread, spread ) ), y: ~~( y + rand( -spread, spread ) ) })); } } } function step() { if( !mouseMoved ) { mouse.x = w / 2 + Math.cos( tick / 40 ) * 90; mouse.y = h / 2 + Math.sin( tick / 40 ) * 90; } points.forEach( function( point ) { point.step(); }); tick++; } function draw() { ctx.clearRect( 0, 0, w, h ); ctx.beginPath(); for( var x = 0; x < cols; x++ ) { for( var y = 0; y < rows; y++ ) { basePoint = points[ x * rows + y ]; rightPoint = x === cols - 1 ? null : points[ ( x + 1 ) * rows + y ]; botPoint = y === rows - 1 ? null : points[ x * rows + y + 1 ]; if( rightPoint ) { ctx.moveTo( basePoint.x, basePoint.y ); ctx.lineTo( rightPoint.x, rightPoint.y ); } if( botPoint ) { ctx.moveTo( basePoint.x, basePoint.y ); ctx.lineTo( botPoint.x, botPoint.y ); } } } ctx.stroke(); ctx.fillStyle = '#000'; points.forEach( function( point ) { ctx.save(); ctx.beginPath(); ctx.translate( point.x, point.y ); ctx.rotate( Math.PI / 4 ); ctx.rect( 0, 0 , 0, 0 ); ctx.fill(); ctx.stroke(); ctx.restore(); }); var grad = ctx.createRadialGradient( mouse.x, mouse.y, 0, mouse.x, mouse.y, option_hero_background_mesh_spotlight_size ); grad.addColorStop( 0, 'hsla(0, 0%, 0%, 0)' ); grad.addColorStop( 1, 'hsla(0, 0%, 0%, 0.93)' ); ctx.fillStyle = grad; ctx.fillRect( 0, 0, w, h ); } function loop() { requestAnimationFrame( loop ); step(); draw(); } function mousemove( e ) { mouseMoved = true; mouse.x = e.pageX; mouse.y = e.pageY; } window.addEventListener( 'resize', reset ); window.addEventListener( 'mousemove', mousemove ); init(); $(".hero .background-content #canvas canvas").css("background-color",option_hero_background_mesh_background_color); } // CANVAS SPACE BACKGROUND FUNCTION function spaceBackground() { /** * A jQuery plugin that generates an interactive starfield inside a canvas element. * * Based on Chiptune's starfield.js: * https://github.com/chiptune/js/blob/master/starfield.html */ (function($, window, document, undefined) { // Plugin constructor var Starfield = function(el, options) { this.el = el; this.$el = $(el); this.options = options; that = this; }; var isPlaying; var isInited = false; var canCanvas = false; var animId; var that; // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating // requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel // MIT license (function() { var lastTime = 0; var vendors = ['ms', 'moz', 'webkit', 'o']; for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame']; } if (!window.requestAnimationFrame) window.requestAnimationFrame = function(callback, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function(id) { clearTimeout(id); }; }()); Starfield.prototype = { defaults: { starColor: option_hero_background_star_star_color, bgColor: option_hero_background_star_background_color, mouseMove: true, mouseColor: "rgba(0,0,0,0.2)", mouseSpeed: 15, speed: option_hero_background_space_star_speed, quantity: option_hero_background_space_star_amount, ratio: option_hero_background_space_star_amount / 2, divclass: "starfield" }, resizer: function() { var oldStar = this.star; var initW = this.context.canvas.width; var initH = this.context.canvas.height; this.w = this.$el.width(); this.h = this.$el.height(); this.x = Math.round(this.w / 2); this.y = Math.round(this.h / 2); var ratX = this.w / initW; var ratY = this.h / initH; this.context.canvas.width = this.w; this.context.canvas.height = this.h; for(var i = 0; i < this.n; i++) { this.star[i][0] = oldStar[i][0] * ratX; this.star[i][1] = oldStar[i][1] * ratY; this.star[i][3] = this.x + (this.star[i][0] / this.star[i][2]) * this.star_ratio; this.star[i][4] = this.y + (this.star[i][1] / this.star[i][2]) * this.star_ratio; } that.context.fillStyle = that.settings.bgColor; this.context.strokeStyle = this.settings.starColor; }, init: function() { this.settings = $.extend({}, this.defaults, this.options); var url = document.location.href; this.n = parseInt( (url.indexOf('n=') != -1) ? url.substring(url.indexOf('n=') + 2, ( (url.substring( url.indexOf('n=') + 2, url.length)).indexOf('&') != -1) ? url.indexOf('n=') + 2 + (url.substring( url.indexOf('n=') + 2, url.length)).indexOf('&') : url.length) : this.settings.quantity ); this.flag = true; this.test = true; this.w = 0; this.h = 0; this.x = 0; this.y = 0; this.z = 0; this.star_color_ratio = 0; this.star_x_save = 0; this.star_y_save = 0; this.star_ratio = this.settings.ratio; this.star_speed = this.settings.speed; this.star_speed_save = 0; this.star = new Array(this.n); this.color = this.settings.starColor; this.opacity = 0.1; this.cursor_x = 0; this.cursor_y = 0; this.mouse_x = 0; this.mouse_y = 0; this.canvas_x = 0; this.canvas_y = 0; this.canvas_w = 0; this.canvas_h = 0; this.fps = this.settings.fps; this.desktop = !navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|BB10|IEMobile)/); this.orientationSupport = window.DeviceOrientationEvent !== undefined; this.portrait = null; var canvasInit = function() { that.w = that.$el.width(); that.h = that.$el.height(); that.initW = that.w; that.initH = that.h; that.portrait = that.w < that.h; that.wrapper = $('') .addClass(that.settings.divclass); that.wrapper.appendTo(that.el); that.starz = $('canvas', that.el); if (that.starz[0].getContext) { that.context = that.starz[0].getContext('2d'); canCanvas = true; } that.context.canvas.width = that.w; that.context.canvas.height = that.h; } canvasInit(); var starInit = function() { if (canCanvas) { that.x = Math.round(that.w / 2); that.y = Math.round(that.h / 2); that.z = (that.w + that.h) / 2; that.star_color_ratio = 1 / that.z; that.cursor_x = that.x; that.cursor_y = that.y; for (var i = 0; i < that.n; i++) { that.star[i] = new Array(5); that.star[i][0] = Math.random() * that.w * 2 - that.x * 2; that.star[i][1] = Math.random() * that.h * 2 - that.y * 2; that.star[i][2] = Math.round(Math.random() * that.z); that.star[i][3] = 0; that.star[i][4] = 0; } that.context.fillStyle = that.settings.bgColor; that.context.strokeStyle = that.settings.starColor; } else { return; } } starInit(); isInited = true; }, anim: function() { this.mouse_x = this.cursor_x - this.x; this.mouse_y = this.cursor_y - this.y; this.context.fillRect(0, 0, this.w, this.h); for (var i = 0; i < this.n; i++) { this.test = true; this.star_x_save = this.star[i][3]; this.star_y_save = this.star[i][4]; this.star[i][0] += this.mouse_x >> 4; // X coords if (this.star[i][0] > this.x << 1) { this.star[i][0] -= this.w << 1; this.test = false; } if (this.star[i][0] < -this.x << 1) { this.star[i][0] += this.w << 1; this.test = false; } this.star[i][1] += this.mouse_y >> 4; if (this.star[i][1] > this.y << 1) { this.star[i][1] -= this.h << 1; this.test = false; } if (this.star[i][1] < -this.y << 1) { this.star[i][1] += this.h << 1; this.test = false; } // Z coords this.star[i][2] -= this.star_speed; if (this.star[i][2] > this.z) { this.star[i][2] -= this.z; this.test = false; } if (this.star[i][2] < 0) { this.star[i][2] += this.z; this.test = false; } this.star[i][3] = this.x + (this.star[i][0] / this.star[i][2]) * this.star_ratio; this.star[i][4] = this.y + (this.star[i][1] / this.star[i][2]) * this.star_ratio; if (this.star_x_save > 0 && this.star_x_save < this.w && this.star_y_save > 0 && this.star_y_save < this.h && this.test) { this.context.lineWidth = (1 - this.star_color_ratio * this.star[i][2]) * 2; this.context.beginPath(); this.context.moveTo(this.star_x_save, this.star_y_save); this.context.lineTo(this.star[i][3], this.star[i][4]); this.context.stroke(); this.context.closePath(); } } }, loop: function() { this.anim(); animId = window.requestAnimationFrame(function() { that.loop() }); }, move: function() { var doc = document.documentElement; if (this.orientationSupport && !this.desktop) { window.addEventListener('deviceorientation', handleOrientation, false); } else { window.addEventListener('mousemove', handleMousemove, false); } function handleOrientation(event) { if (event.beta !== null && event.gamma !== null) { var x = event.gamma, y = event.beta; if (!that.portrait) { x = event.beta * -1; y = event.gamma; } that.cursor_x = (that.w / 2) + (x * 5); that.cursor_y = (that.h / 2) + (y * 5); } } function handleMousemove(event) { that.cursor_x = event.pageX || event.clientX + doc.scrollLeft - doc.clientLeft; that.cursor_y = event.pageY || event.clientY + doc.scrollTop - doc.clientTop; } }, stop: function() { window.cancelAnimationFrame(animId); isPlaying = false; }, start: function() { if (!isInited) { isInited = true; this.init(); } if (!isPlaying) { isPlaying = true; this.loop(); } window.addEventListener('resize', function() { that.resizer() }, false); window.addEventListener('orientationchange', function() { that.resizer() }, false); if (this.settings.mouseMove) { this.move(); } return this; } } Starfield.defaults = Starfield.prototype.defaults; // Finally, the actual plugin code $.fn.starfield = function(options) { return this.each(function() { new Starfield(this, options).start(); }); } window.Starfield = Starfield; })(jQuery, window, document); $('#canvas').starfield(); } // ABSTRACT BACKGROUND FUNCTION function abstractBackground() { $(".hero .bg-pattern").remove(); $(".hero .bg-overlay").remove(); var bgInterval = setInterval(function(){ if( $(".hero .level-1 #canvas").offset().top <= 0 ) { $(".hero .level-1 #canvas").css({ WebkitTransition: "all .4s" ,transition: "all .4s" }); $(".hero .level-1 #canvas").css("background",option_hero_background_abstract_bg_color); clearInterval(bgInterval); } }, 50); var MESH = { width: option_hero_background_width / 100, height: 1.8, depth: 60, segments: 9, slices: 8, xRange: option_hero_background_width_expansion, yRange: 0.1, zRange: 1.0, ambient: '#666666', diffuse: '#fff', speed: option_hero_background_move_speed / 10000 }; var LIGHT = { count: 2, xyScalar: 1, zOffset: 100, ambient: '#fff', diffuse: '#b3b3b3', speed: 0.0002, gravity: 500, dampening: 0.95, minLimit: 10, maxLimit: null, minDistance: 20, maxDistance: 400, autopilot: true, draw: false, bounds: FSS.Vector3.create(), step: FSS.Vector3.create( Math.randomInRange(0.2, 1.0), Math.randomInRange(0.2, 1.0), Math.randomInRange(0.2, 1.0) ) }; var RENDER = { renderer: 'canvas' }; var now, start = Date.now(); var center = FSS.Vector3.create(); var attractor = FSS.Vector3.create(); var container = document.getElementById('canvas'); var output = document.getElementById('canvas'); var renderer, scene, mesh, geometry, material; var canvasRenderer; var gui, autopilotController; function initialise() { createRenderer(); createScene(); createMesh(); createLights(); addEventListeners(); resize(container.offsetWidth, container.offsetHeight); animate(); } function createRenderer() { canvasRenderer = new FSS.CanvasRenderer(); setRenderer(RENDER.renderer); } function setRenderer(index) { if (renderer) { output.removeChild(renderer.element); } renderer = canvasRenderer; renderer.setSize(container.offsetWidth, container.offsetHeight); output.appendChild(renderer.element); } function createScene() { scene = new FSS.Scene(); } function createMesh() { scene.remove(mesh); renderer.clear(); geometry = new FSS.Plane(MESH.width * renderer.width, MESH.height * renderer.height, MESH.segments, MESH.slices); material = new FSS.Material(MESH.ambient, MESH.diffuse); mesh = new FSS.Mesh(geometry, material); scene.add(mesh); // Augment vertices for animation var v, vertex; for (v = geometry.vertices.length - 1; v >= 0; v--) { vertex = geometry.vertices[v]; vertex.anchor = FSS.Vector3.clone(vertex.position); vertex.step = FSS.Vector3.create( Math.randomInRange(0.2, 1.0), Math.randomInRange(0.2, 1.0), Math.randomInRange(0.2, 1.0) ); vertex.time = Math.randomInRange(0, Math.PIM2); } } function createLights() { var l, light; for (l = scene.lights.length - 1; l >= 0; l--) { light = scene.lights[l]; scene.remove(light); } renderer.clear(); for (l = 0; l < LIGHT.count; l++) { light = new FSS.Light(LIGHT.ambient, LIGHT.diffuse); light.ambientHex = light.ambient.format(); light.diffuseHex = light.diffuse.format(); scene.add(light); // Augment light for animation light.mass = Math.randomInRange(0.5, 1); light.velocity = FSS.Vector3.create(); light.acceleration = FSS.Vector3.create(); light.force = FSS.Vector3.create(); // Ring SVG Circle light.ring = document.createElementNS(FSS.SVGNS, 'circle'); light.ring.setAttributeNS(null, 'stroke', light.ambientHex); light.ring.setAttributeNS(null, 'stroke-width', '0.5'); light.ring.setAttributeNS(null, 'fill', 'none'); light.ring.setAttributeNS(null, 'r', '10'); // Core SVG Circle light.core = document.createElementNS(FSS.SVGNS, 'circle'); light.core.setAttributeNS(null, 'fill', light.diffuseHex); light.core.setAttributeNS(null, 'r', '4'); } } function resize(width, height) { renderer.setSize(width, height); FSS.Vector3.set(center, renderer.halfWidth, renderer.halfHeight); createMesh(); } function animate() { now = Date.now() - start; update(); render(); requestAnimationFrame(animate); } function update() { var ox, oy, oz, l, light, v, vertex, offset = MESH.depth/2; // Update Bounds FSS.Vector3.copy(LIGHT.bounds, center); FSS.Vector3.multiplyScalar(LIGHT.bounds, LIGHT.xyScalar); // Update Attractor FSS.Vector3.setZ(attractor, LIGHT.zOffset); // Overwrite the Attractor position if (LIGHT.autopilot) { ox = Math.sin(LIGHT.step[0] * now * LIGHT.speed); oy = Math.cos(LIGHT.step[1] * now * LIGHT.speed); FSS.Vector3.set(attractor, LIGHT.bounds[0]*ox, LIGHT.bounds[1]*oy, LIGHT.zOffset); } // Animate Lights for (l = scene.lights.length - 1; l >= 0; l--) { light = scene.lights[l]; // Reset the z position of the light FSS.Vector3.setZ(light.position, LIGHT.zOffset); // Calculate the force Luke! var D = Math.clamp(FSS.Vector3.distanceSquared(light.position, attractor), LIGHT.minDistance, LIGHT.maxDistance); var F = LIGHT.gravity * light.mass / D; FSS.Vector3.subtractVectors(light.force, attractor, light.position); FSS.Vector3.normalise(light.force); FSS.Vector3.multiplyScalar(light.force, F); // Update the light position FSS.Vector3.set(light.acceleration); FSS.Vector3.add(light.acceleration, light.force); FSS.Vector3.add(light.velocity, light.acceleration); FSS.Vector3.multiplyScalar(light.velocity, LIGHT.dampening); FSS.Vector3.limit(light.velocity, LIGHT.minLimit, LIGHT.maxLimit); FSS.Vector3.add(light.position, light.velocity); } // Animate Vertices for (v = geometry.vertices.length - 1; v >= 0; v--) { vertex = geometry.vertices[v]; ox = Math.sin(vertex.time + vertex.step[0] * now * MESH.speed); oy = Math.cos(vertex.time + vertex.step[1] * now * MESH.speed); oz = Math.sin(vertex.time + vertex.step[2] * now * MESH.speed); FSS.Vector3.set(vertex.position, MESH.xRange*geometry.segmentWidth*ox, MESH.yRange*geometry.sliceHeight*oy, MESH.zRange*offset*oz - offset); FSS.Vector3.add(vertex.position, vertex.anchor); } // Set the Geometry to dirty geometry.dirty = true; } function render() { renderer.render(scene); // Draw Lights if (LIGHT.draw) { var l, lx, ly, light; for (l = scene.lights.length - 1; l >= 0; l--) { light = scene.lights[l]; lx = light.position[0]; ly = light.position[1]; renderer.context.lineWidth = 0.5; renderer.context.beginPath(); renderer.context.arc(lx, ly, 10, 0, Math.PIM2); renderer.context.strokeStyle = light.ambientHex; renderer.context.stroke(); renderer.context.beginPath(); renderer.context.arc(lx, ly, 4, 0, Math.PIM2); renderer.context.fillStyle = light.diffuseHex; renderer.context.fill(); } } } function addEventListeners() { window.addEventListener('resize', onWindowResize); } function onMouseMove(event) { FSS.Vector3.set(attractor, event.x, renderer.height - event.y); FSS.Vector3.subtract(attractor, center); } function onWindowResize(event) { resize(container.offsetWidth, container.offsetHeight); render(); } initialise(); if (canvas.getContext) { var ctx = canvas.getContext('2d'); var left = true; canvas.height = screen.height - 60; canvas.width = screen.width + 20; initialize(); initialize(); var timer = setInterval(function () { for (var i = 1; i <= 1000; i++) { ctx.beginPath(); if (left) { ctx.moveTo(0, randomize(canvas.height + 10)); left = false; } else { ctx.moveTo(randomize(canvas.width+ 10), 0); left = true; } ctx.lineTo(randomize(canvas.width + 50), randomize(canvas.height + 50)); ctx.lineTo(randomize(canvas.width + 50), randomize(canvas.height + 50)); ctx.fillStyle = getRndColor(); ctx.fill(); } }, 5000); } } // GLITCH BACKGROUND FUNCTION function glitchBackground() { var bgImage = "background-image: url('"+option_hero_background_glitch_image+"')"; $(".hero .level-2 .bg-image").append('
'); $( ".glitch-img" ).mgGlitch({ destroy : false, // set 'true' to stop the plugin glitch: true, // set 'false' to stop glitching scale: true, // set 'false' to stop scaling blend : true, // set 'false' to stop glitch blending blendModeType : 'hue', // select blend mode type glitch1TimeMin : 600, // set min time for glitch 1 elem glitch1TimeMax : 900, // set max time for glitch 1 elem glitch2TimeMin : 10, // set min time for glitch 2 elem glitch2TimeMax : 115, // set max time for glitch 2 elem zIndexStart : 8, // because of absolute position, set z-index base value }); } // CHECK FOR ACTIVE EFFECTS function checkforBackgroundEffects() { if ( option_hero_gravity_effect === "on" ) { gravityBackgroundEffect(); } } // LOAD SCRIPT FUNCTION function loadScript(url, callback) { var head = document.getElementsByTagName('head')[0]; var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; script.onreadystatechange = callback; script.onload = callback; head.appendChild(script); } // BACKGROUND CONTROLLER switch(option_hero_background_mode) { case "image": imageBackground(); checkforBackgroundEffects(); break; case "slider": sliderBackground(); checkforBackgroundEffects(); break; case "kenburns": kenburnsBackground(); checkforBackgroundEffects(); break; case "youtube": if ( jQuery.browser.mobile ) { imageBackground(); } else { youtubeBackground(); } checkforBackgroundEffects(); break; case "color": colorBackground(); checkforBackgroundEffects(); break; case "gradient": gradientBackground(); checkforBackgroundEffects(); break; case "sphere": loadScript("assets/js/plugins/three.min.js", function() { canvasSphereBackground(); }); break; case "waves": loadScript("assets/js/plugins/three.min.js", function() { canvasWavesBackground(); }); break; case "mesh": meshBackground(); break; case "space": spaceBackground(); break; case "abstract": loadScript("assets/js/plugins/fss.min.js", function() { abstractBackground(); }); break; case "glitch": glitchBackground(); checkforBackgroundEffects(); break; case "custom": customBackground(); checkforBackgroundEffects(); break; default: alert( "Error! No background is set or something went wrong" ); console.log("Error! No background is set or something went wrong"); break; } /** 3. EFFECT *******************************************************************/ // 2D HOVER EFFECT if ( option_hero_parallax_hover_effect == "on") { // PARALLAX HOVER EFFECT var $scene = $(".hero").parallax({ scalarX: 24, scalarY: 15, frictionX: 0.1, frictionY: 0.1, }); // DISABLE OR ENABLE PARALLAX ON MOUSEENTER MOUSELEAVE $( ".hero" ).hover( function() { $scene.parallax("enable"); }, function() { $scene.parallax("disable"); } ); } // GRAVITY BACKGROUND EFFECT function gravityBackgroundEffect() { function Constellation (canvas, options) { var screenpointSplitt = 14000, movingSpeed = 0.2, viewportWidth = $(".hero .level-1").width(), viewportHeight = $(".hero .level-1").height(), nbCalculated = Math.round(viewportHeight*viewportWidth/screenpointSplitt), $canvas = $(canvas), context = canvas.getContext("2d"), defaults = { star: {color: "rgba(255, 255, 255, .65)",width: 1}, line: {color: "rgba(255, 255, 255, .65)",width: 0.2}, position: {x: 0,y: 0}, width: viewportWidth, height: viewportHeight, velocity: movingSpeed, length: nbCalculated, distance: 120, radius: 200, stars: [] }, config = $.extend(true, {}, defaults, options); function Star () { this.x = Math.random() * canvas.width; this.y = Math.random() * canvas.height; this.vx = (config.velocity - (Math.random() * 0.5)); this.vy = (config.velocity - (Math.random() * 0.5)); this.radius = Math.random() * config.star.width; } Star.prototype = { create: function(){ context.beginPath(); context.arc(this.x, this.y, this.radius, 0, Math.PI * 2, false); context.fill(); }, animate: function(){ var i; for (i = 0; i < config.length; i++) { var star = config.stars[i]; if (star.y < 0 || star.y > canvas.height) { star.vx = star.vx; star.vy = - star.vy; } else if (star.x < 0 || star.x > canvas.width) { star.vx = - star.vx; star.vy = star.vy; } star.x += star.vx; star.y += star.vy; } }, line: function(){ var length = config.length, iStar, jStar, i, j; for (i = 0; i < length; i++) { for (j = 0; j < length; j++) { iStar = config.stars[i]; jStar = config.stars[j]; if ( (iStar.x - jStar.x) < config.distance && (iStar.y - jStar.y) < config.distance && (iStar.x - jStar.x) > - config.distance && (iStar.y - jStar.y) > - config.distance ) { if ( (iStar.x - config.position.x) < config.radius && (iStar.y - config.position.y) < config.radius && (iStar.x - config.position.x) > - config.radius && (iStar.y - config.position.y) > - config.radius ) { context.beginPath(); context.moveTo(iStar.x, iStar.y); context.lineTo(jStar.x, jStar.y); context.stroke(); context.closePath(); } } } } } }; this.createStars = function () { var length = config.length, star, i; context.clearRect(0, 0, canvas.width, canvas.height); for (i = 0; i < length; i++) { config.stars.push(new Star()); star = config.stars[i]; star.create(); } star.line(); star.animate(); config.stars.splice(length, length); }; this.setCanvas = function () { canvas.width = config.width; canvas.height = config.height; context.fillStyle = config.star.color; context.strokeStyle = config.line.color; context.lineWidth = config.line.width; if (!options || !options.hasOwnProperty("position")) { config.position = { x: canvas.width * 0.5, y: canvas.height * 0.5 }; } }; this.loop = function (callback) { callback(); window.requestAnimationFrame(function () { this.loop(callback); }.bind(this)); }; this.bind = function () { $(window).on("mousemove", function(e){ config.position.x = e.pageX - $canvas.offset().left; config.position.y = e.pageY - $canvas.offset().top; }); }; this.init = function () { this.setCanvas(); this.loop(this.createStars); this.bind(); }; } $.fn.constellation = function (options) { return this.each(function () { var c = new Constellation(this, options); c.init(); }); }; $("#canvas canvas").constellation({}); var waitForFinalEvent = (function () { var timers = {}; return function (callback, ms, uniqueId) { if (!uniqueId) { uniqueId = "Don't call this twice without a uniqueId"; } if (timers[uniqueId]) { clearTimeout (timers[uniqueId]); } timers[uniqueId] = setTimeout(callback, ms); }; })(); $(window).resize(function () { waitForFinalEvent(function(){ $("#canvas canvas").constellation({}); }, 500, "some unique string"); }); } /** 4. CYCLE *****************************************************/ // VARIBABLES var cycleDuration = 800; var cycleDelay = 6000; // ADAPT DELAY TO SLIDER if (option_hero_background_mode === "slider") { cycleDuration = option_hero_background_slider_transitionDuration; cycleDelay = option_hero_background_slider_delay; } // ADAPT DELAY TO KENBURNS SLIDER if (option_hero_background_mode === "kenburns") { cycleDuration = option_hero_background_kenburns_transitionDuration; cycleDelay = option_hero_background_kenburns_delay; } // CYCLE SLIDESHOW $("#cycle").cycle({ fx : "scrollVert", timeout: cycleDelay, delay: 0, autoHeight: "container", speed: cycleDuration, slides: ".slide", log: false }); });