shell bypass 403
/* * Wavify * Jquery Plugin to make some nice waves * by peacepostman @ crezeo */ (function ( $ ) { $.fn.wavify = function( options ) { // Options // // var settings = $.extend({ container: options.container ? options.container : 'body', // Height of wave height: 200, // Amplitude of wave amplitude: 100, // Animation speed speed: .15, // Total number of articulation in wave bones: 3, // Color color: 'rgba(255,255,255, 0.20)' }, options ); var wave = this, width = $(settings.container).width(), height = $(settings.container).height(), points = [], lastUpdate, totalTime = 0; // Set color // TweenLite.set(wave, {attr:{fill: settings.color}}); function drawPoints(factor) { var points = []; for (var i = 0; i <= settings.bones; i++) { var x = i/settings.bones * width; var sinSeed = (factor + (i + i % settings.bones)) * settings.speed * 100; var sinHeight = Math.sin(sinSeed / 100) * settings.amplitude; var yPos = Math.sin(sinSeed / 100) * sinHeight + settings.height; points.push({x: x, y: yPos}); } return points; } function drawPath(points) { var SVGString = 'M ' + points[0].x + ' ' + points[0].y; var cp0 = { x: (points[1].x - points[0].x) / 2, y: (points[1].y - points[0].y) + points[0].y + (points[1].y - points[0].y) }; SVGString += ' C ' + cp0.x + ' ' + cp0.y + ' ' + cp0.x + ' ' + cp0.y + ' ' + points[1].x + ' ' + points[1].y; var prevCp = cp0; var inverted = -1; for (var i = 1; i < points.length-1; i++) { var cpLength = Math.sqrt(prevCp.x * prevCp.x + prevCp.y * prevCp.y); var cp1 = { x: (points[i].x - prevCp.x) + points[i].x, y: (points[i].y - prevCp.y) + points[i].y }; SVGString += ' C ' + cp1.x + ' ' + cp1.y + ' ' + cp1.x + ' ' + cp1.y + ' ' + points[i+1].x + ' ' + points[i+1].y; prevCp = cp1; inverted = -inverted; } SVGString += ' L ' + width + ' ' + height; SVGString += ' L 0 ' + height + ' Z'; return SVGString; } // Draw function // // function draw() { var now = window.Date.now(); if (lastUpdate) { var elapsed = (now-lastUpdate) / 1000; lastUpdate = now; totalTime += elapsed; var factor = totalTime*Math.PI; TweenMax.to(wave, settings.speed, { attr:{ d: drawPath(drawPoints(factor)) }, ease: Power1.easeInOut }); } else { lastUpdate = now; } requestAnimationFrame(draw); } // Pure js debounce function to optimize resize method // // function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; clearTimeout(timeout); timeout = setTimeout(function() { timeout = null; if (!immediate) func.apply(context, args); }, wait); if (immediate && !timeout) func.apply(context, args); }; } // Redraw for resize with debounce // var redraw = debounce(function() { wave.attr('d', ''); points = []; totalTime = 0; width = $(settings.container).width(); height = $(settings.container).height(); lastUpdate = false; setTimeout(function(){ draw(); }, 50); }, 250); $(window).on('resize', redraw); // Execute // return draw(); }; }(jQuery));