Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var aaSnowConfig = {snowflakes: '200'}; // number of snowflakes
- var garlandMode = 0; // 0 - Default, 1 - Round Robin, 2 - Double Lights, 3 - All Lights
- var garlandSpeed = 600; //ms
- // dynamic speed:
- // do speed correction every speedCorrectionFrames frames
- var speedCorrectionFrames = 60;
- var currentSpeedCorrectionFrame = 0;
- // start without any speed correction
- var speedFactor = .8;
- // fall down to this value at most
- var minSpeedFactor = 0.1;
- // get fast at this value at most
- var maxSpeedFactor = 1.5;
- // don't set value immidietly change gradually by this amount
- var speedFactorDelta = 0.05;
- var snowStyle = `
- <style type='text/css'>
- #garland {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 500;
- background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAEgCAYAAABCXNaaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NkNBQzE0NzRDNjJFMTFFNjk0MTBCOEVEQUE4QjExNUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NkNBQzE0NzVDNjJFMTFFNjk0MTBCOEVEQUE4QjExNUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2Q0FDMTQ3MkM2MkUxMUU2OTQxMEI4RURBQThCMTE1QiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2Q0FDMTQ3M0M2MkUxMUU2OTQxMEI4RURBQThCMTE1QiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqiuVIYAAHPPSURBVHja7L0JnFxV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');
- height: 36px;
- width: 100%;
- overflow: hidden;
- z- index: 99;
- }
- #nums_1 {
- padding: 100px;
- }
- .garland_1 {
- background-position: 0 0;
- }
- .garland_2 {
- background-position: 0 -36px;
- }
- .garland_3 {
- background-position: 0 -72px;
- }
- .garland_4 {
- background-position: 0 -108px;
- }
- .garland_5 {
- background-position: 0 -144px;
- }
- .garland_6 {
- background-position: 0 -180px;
- }
- .garland_7 {
- background-position: 0 -216px;
- }
- .garland_8 {
- background-position: 0 -252px;
- }
- </style>
- `
- $('head').append(snowStyle);
- $('body').prepend(`
- <div id="garland" class="garland_4">
- <div id="nums_1">1</div>
- </div>
- `);
- function garland() {
- var nums = document.getElementById('nums_1').innerHTML;
- if(garlandMode <= 0){
- document.getElementById('garland').className = 'garland_'+nums;
- if(++nums >= 9) nums = 1;
- document.getElementById('nums_1').innerHTML = nums;
- }
- else if(garlandMode === 1){
- document.getElementById('garland').className = 'garland_'+nums;
- if(++nums >= 6) nums = 2;
- document.getElementById('nums_1').innerHTML = nums;
- }
- else if(garlandMode === 2){
- if(nums < 7) nums = 6;
- document.getElementById('garland').className = 'garland_'+nums;
- if(++nums == 8) nums = 6;
- document.getElementById('nums_1').innerHTML = nums;
- }
- else{
- if(nums == 1){
- document.getElementById('garland').className = 'garland_8';
- document.getElementById('nums_1').innerHTML = '8';
- }
- else{
- document.getElementById('garland').className = 'garland_1';
- document.getElementById('nums_1').innerHTML = '1';
- }
- }
- setTimeout(garland, garlandSpeed);
- };
- garland();
- var idleTimeout = 1000,
- idleNow = false,
- idleTimestamp = null,
- idleTimer = null;
- function setIdleTimeout(ms) {
- idleTimeout = ms;
- idleTimestamp = new Date().getTime() + ms;
- if (idleTimer != null) {
- clearTimeout(idleTimer);
- }
- idleTimer = setTimeout(makeIdle, ms + 50);
- }
- function makeIdle() {
- var t = new Date().getTime();
- if (t < idleTimestamp) {
- idleTimer = setTimeout(makeIdle, idleTimestamp - t + 50);
- return;
- }
- // console.log('** IDLE **');
- idleNow = true;
- try {
- if (document.onIdle) document.onIdle();
- } catch (err) {}
- }
- function active(event) {
- var t = new Date().getTime();
- idleTimestamp = t + idleTimeout;
- // console.log('not idle.');
- if (idleNow) {
- setIdleTimeout(idleTimeout);
- }
- // console.log('** BACK **');
- if ((idleNow) && document.onBack) document.onBack(idleNow);
- idleNow = false;
- }
- var doc = jQuery(document);
- doc.ready(function () {
- doc.mousemove(active);
- try {
- doc.mouseenter(active);
- } catch (err) {}
- try {
- doc.scroll(active);
- } catch (err) {}
- try {
- doc.keydown(active);
- } catch (err) {}
- try {
- doc.click(active);
- } catch (err) {}
- try {
- doc.dblclick(active);
- } catch (err) {}
- });
- Snowflakes = (function () {
- "use strict";
- // snowflakes objects collection
- var snowflakes = [];
- var snowflakesDefaultCount = 1000;
- // if true - we'll guess the best number of snowflakes for the system
- var dynamicSnowflakesCount = false;
- // we increment snowflakes with this rate
- var snowflakeCountIncrement = 0.1;
- // we can remove aggressively (to quicker free system resources), basically we remove at snowflakeCountIncrement*snowflakeRemoveFactor rate
- var snowflakeRemoveFactor = 2;
- // snowflakes sprites
- var snowflakeSpritesLocation = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAUCAYAAAB7wJiVAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAACPNJREFUeNrMmXtwVdUVxn9JSEICCQkJIDGAECANVB6KINBoeWoVOtZqBaxW29JKWxFLlWofA7VqRwalRatOHR3t0OkTighqxSodCxRIlaYQW4xIQIHiI5DgJYRk94/+zszp9ZKEx0y7Z86ce+/ZZ++11/q+b629b1oIgQ60pcCtQIc6t9Mme1/H/2dLA74KPHKGxhsHHAc2d6Rzp3aeZwCzgeHeVwDvnqJhU4HuwOeBJqAXsA/442kuuBswCqgC6k/y3U46K2rpwMXAV4DXgfVJIMwAWtoZsw/wjv16G5AmoA7Yb5+uQGOql9PbGfxG4BKgMzAJuOYUHPZNoBL4s4b1Bso0aJPOnHsaASkCvm2wT7ZNARa4rgwgG7gHeA/4gd87A58B7gAu7MCYA4DbBcpcoB9QAswBcvXphFNlyCGgJ1AslTNOcsGVwDID3wSsBPJ9tsr7dmCHSNqchNjkVqxNzdozxN/rgBygQmQHIBMoAA62Md5fgUWiuRxYAtQCDTo0A7gNuEi7H+rAmt8GztG+HcC/HL8IyFKyl5xQkhYuXAjQH+hh589KVVzc5VItHZgfo+y3/JwHHIk5MktKTvLZDp2VJjumAwN1Yr39G0XWWGCvDk2Whl46Bx02CvjAxZUDY4C1wLlAAhivPP5N+1K1UaL1fVF8UNvHCI4uMYVodi11SWPka9vHDNxB4B8qQ7W/FwN7gJnA72TeGN/N0XdN8YDMlZaXiIxq70UaOBt4VMQ1OcjXgU/ryInAsxp4IfBjtXgL8AZwVG2tE7kHTOp9/ZxpkOYCM4BdXvF2VEZ/UWa0uPh3gVnAYgM0RLs+KQv/DrSmCEYm8JZOGSnzBigxtd5H+LwZeA74ZYpxcpS8Pgawl7Zl+32nYw/WjnoJUGKgBgJbI0BHAWk06fYAzgYGOcFQB0wAu325J3CdaDjmQD+VqojwCcoHQKkTnmfAB2nIMJlQC1xrAEcawKUpnBhc2BDgC9o8yqtV9lU43wzgZdHYkDTORcBopeo8VeAlgfQzHVVicJcblOdl3zjgUtcTYkDpIrj2mh9rdHqegS8U3M0yZZhFSIHgfyM5qe+3Y+TQcaJlvU4fLzNW6YBK4BWfvZlUMQxwgquBPwDzRH6rRubIulLHnAd8F9gITNPQwSeo+IYoG6tc+HhgtZK12u8DgKd1ypAUea/OOXN0yGTgJuBBJfEnsv8ef39Kxt1qMK60QJkTG3OPzGjVfwMtDF7TznyZcUTmve78fYF/psohCY17RSfttCKYroNqXMgdBmG7yHvZd9cZfUTXGoNcoMZfDnwJeEw0pdvnR843S53epnYXpUjG5S7ykAirEIGFsrS3rM4UJM8phz2TSvV6AVGhA4uBPyk7VwuGHtq+1OsXPtuvg3+rKkR5Ls/1FHu9D1ygGvQ3WHlK7i7n3wP83HnqkwPSKnVqlJ7OwDNq7CeAhVJ4mxP3cv/wG2BDLBjRfqNaSkcy1kNUDDPRDjco60VUtdIVSVOltqDBZ2nTYquW0cpJLnBYqelrwJYD5xuE+YImNyYvAH9xvlwdtFPG1rjeq3x2QAfXasdgc+nGmKLcpL2TlN16gbHBoBdpe722VFjIfMqATbV/1YnK3kIjmOVgEQoSbuSOKxu1J9gkHbMgCLFNUFeNanS/0Gq/TD/3iW2ammMORKTd6XxlSstu4AGD/EMlqgX4nojeZb+3lacy4F4llFgRUWHhEawCW2Rs95jUZWnjPgP2quVy1B4x7x4SKBXaN9zxjjvfYYO9SYAul5mlAuI/xwQeneRK2aMmsS4a0k/J6S+S51m1ZIrAzfZbF8sjpe5UW5WZWkvkq3RiiQHbau54WqeWu+C0WEUWMaRAm+4Ffm1FuFZ0HTF/TFMWngcuc8/zOeA7ymt9TBoeE2zZBqDKMvQG4OOxYGxRnlZqf73vrXB/FbVBFhLV2p/vOhti1eoWleU9A5WwkHhCYP1XUi+xwpmvYy514K852XyNv0vnTLOsvFvqFcaM6wx82WAOMgH2UfYu8HmG9F4gGqvcP5RYYucnaf5bIu0W89c7wM0WGAU6vZtSdbPPt9v/mO9HwZgpevuZa2rc/zxksDNlwzHz0APuzQ4q201Wat1iNvZz/A8tLHYLlO6y9ICyWyhAhwnkDwTwR5J6uZVEsR1eNKLnasBxFxltxhrdjWbLhNdkULS7v8Xjg2xZtNCKp1VkdHKBTS442gt8Xwc/mkIO67WnPDZ3FvAkcL17n/OVvgYdGrQtfh6VMA92VSo2GpTbgftkypWi+inB+KQy3SVW/ORbIeVY5mfKgD3Kbpk2v6k9BRKgQRuKVaRiGdIUzyFX6KA8pWKREZ4samf50rNKVUKn5RucKS4Ma/s8UfaSEtKk7q4UoS2+H6HjcVFbrqNGu+h4a9Fxl2nv7y2vp+vY6bIxzeeHtDc5sFHxsEAHPyh697qO/jp0qL93cp+0TonNlQnEKqwNBiPag2QLmirH6+n6L9auWtVil/NmJ+eQs3ypp/S9y2imq88f+tIVorzVknWDzGmM6WCOSavSyZ/RyS2i4RvS/WGPGLJMeCOde60625BiHzLVnfouF77VQC5TqrbJ4gpl5AnghTZOaGd41H7Y9S028Y4VTLWuuUwQLlA52mq9BPRtyvpxr/7Ar2Ty3fFEnupwcX+syon+p2hVCgpj9LtW+uIJa6qWkGXLZVh6LIntkfpB50U2ZIq0x2OlaaqDxQkm5Fd1ekKn7va+yWCtkakT7XugjYPAUu1dZsFyvTIzVOeNEGA9TNrtteg8LqENnQRgQlBVy56UAUlr5w+q2Sb4s2XCix088Yy3OUrLBo9O7tSwRZaho6Tvkg6MlXzaO9T7POB+A11zEqe908w1+3RUkcFs1JETZfdYZXS1OamtNsKColl7r3GslQY+PQaCj7YQQltXbgjhxhDC1hDCDX7nJK9071NCCDNDCGtCCCtCCNeFECadwnjJV1kI4YUQwoAzMFZmCGFqCGFTCGFsiucZpzDm0BDChI72T+vgX7j3e5x8JtqZ/gs3+sdwq+w53ZbhP4YP/y/+P/73AGIazq+B1brPAAAAAElFTkSuQmCC";
- var snowflakeSprites = [];
- var spritesCount = 5;
- var spriteWidth = 20;
- var spriteHeight = 20;
- // canvas bounds used for snowflake animation
- var bounds = {
- width: window.innerWidth,
- height: window.innerHeight
- };
- // particle movement parameters:
- // we'll advance each particle vertically at least by this amount (think gravity and resistance)
- var minVerticalVelocity = 1;
- // we'll advance each particle vertically at most by this amount (think gravity and resistance)
- var maxVerticalVelocity = 4;
- // we'll shift each particle horizontally at least by this amound (think wind and resistance)
- var minHorizontalVelocity = -1;
- // we'll shift each particle horizontally at least by this amound (think wind and resistance)
- var maxHorizontalVelocity = 3;
- // each particle sprite will be scaled down maxScale / this (this < maxScale) at max
- var minScale = 0.2;
- // each particle sprite will be scaled down this / minScale (this > minScale) at max
- var maxScale = 1.25;
- // each particle also "bobs" on horizontal axis (think volumetric resistance) by this amount at least
- var minHorizontalDelta = 2;
- // each particle also "bobs" on horizontal axis (think volumetric resistance) by this amount at most
- var maxHorizontalDelta = 3;
- // each particle is at least this opaque
- var minOpacity = 0.2;
- // each particle is at least this opaque
- var maxOpacity = 0.9;
- // change opacity by at max 1/maxOpacityIncrement
- var maxOpacityIncrement = 50;
- // create number of snowflakes adding if required (or regenerate from scratch)
- function generate(number, add) {
- // initialize sprite
- var image = new Image();
- image.onload = function () {
- for (var ii = 0; ii < spritesCount; ii++) {
- var sprite = document.createElement("canvas");
- sprite.width = spriteWidth;
- sprite.height = spriteHeight;
- var context = sprite.getContext("2d");
- context.drawImage(
- // source image
- image,
- // source x
- ii * spriteWidth,
- // source y
- 0,
- // source width
- spriteWidth,
- // source height
- spriteHeight,
- // target x
- 0,
- //target y
- 0,
- // target width
- spriteWidth,
- // target height
- spriteHeight);
- snowflakeSprites.push(sprite);
- }
- if (number) {
- snowflakesDefaultCount = number;
- }
- if (!add) {
- snowflakes = [];
- }
- for (var ii = 0; ii < snowflakesDefaultCount; ii++) {
- snowflakes.push(generateSnowflake());
- }
- }
- image.src = snowflakeSpritesLocation;
- }
- function generateSnowflake() {
- var scale = Math.random() * (maxScale - minScale) + minScale;
- return {
- // x position
- x: Math.random() * bounds.width,
- // y position
- y: Math.random() * bounds.height,
- // vertical velocity
- vv: Math.random() * (maxVerticalVelocity - minVerticalVelocity) + minVerticalVelocity,
- // horizontal velocity
- hv: Math.random() * (maxHorizontalVelocity - minHorizontalVelocity) + minHorizontalVelocity,
- // scaled sprite width
- sw: scale * spriteWidth,
- // scaled sprite width
- sh: scale * spriteHeight,
- // maximum horizontal delta
- mhd: Math.random() * (maxHorizontalDelta - minHorizontalDelta) + minHorizontalDelta,
- // horizontal delta
- hd: 0,
- // horizontal delta increment
- hdi: Math.random() / (maxHorizontalVelocity * minHorizontalDelta),
- // opacity
- o: Math.random() * (maxOpacity - minOpacity) + minOpacity,
- // opacity increment
- oi: Math.random() / maxOpacityIncrement,
- // sprite index
- si: Math.ceil(Math.random() * (spritesCount - 1)),
- // not landing flag
- nl: false
- }
- }
- // help snowflakes fall
- function advanceSnowFlakes() {
- for (var ii = 0; ii < snowflakes.length; ii++) {
- var sf = snowflakes[ii];
- // we obey the gravity, 'cause it's the law
- sf.y += sf.vv * speedFactor;
- // while we're obeying the gravity, we do it with style
- sf.x += (sf.hd + sf.hv) * speedFactor;
- // advance horizontal axis "bobbing"
- sf.hd += sf.hdi;
- // inverse "bobbing" direction if we get to maximum delta limit
- if (sf.hd < -sf.mhd || sf.hd > sf.mhd) {
- sf.hdi = -sf.hdi;
- };
- // increment opacity and check opacity value bounds
- sf.o += sf.oi;
- if (sf.o > maxOpacity || sf.o < minOpacity) {
- sf.oi = -sf.oi
- };
- if (sf.o > maxOpacity) sf.o = maxOpacity;
- if (sf.o < minOpacity) sf.o = minOpacity;
- // return within dimensions bounds if we've crossed them
- // and don't forget to reset the not-landing (sf.nl) flag
- var resetNotLanding = false;
- if (sf.y > bounds.height + spriteHeight / 2) {
- sf.y = 0
- resetNotLanding = true;
- };
- if (sf.y < 0) {
- sf.y = bounds.height
- resetNotLanding = true;
- };
- if (sf.x > bounds.width + spriteWidth / 2) {
- sf.x = 0
- resetNotLanding = true;
- };
- if (sf.x < 0) {
- sf.x = bounds.width
- resetNotLanding = true;
- };
- if (resetNotLanding) {
- sf.nl = false;
- }
- }
- }
- // not using, but it allows to increase/decrease speed based on fps
- // in essence - visual feedback on fps value
- function adjustSpeedFactor() {
- if (++currentSpeedCorrectionFrame === speedCorrectionFrames) {
- var lastFps = SystemInformation.getLastFps();
- var targetSpeedFactor = (lastFps * (maxSpeedFactor - minSpeedFactor) / 60) + minSpeedFactor;
- speedFactor += (targetSpeedFactor < speedFactor) ? -speedFactorDelta : speedFactorDelta;
- if (speedFactor > maxSpeedFactor) {
- speedFactor = maxSpeedFactor;
- }
- if (speedFactor < minSpeedFactor) {
- speedFactor = minSpeedFactor;
- }
- currentSpeedCorrectionFrame = 0;
- }
- }
- function renderFrame(context) {
- // fall down one iteration
- advanceSnowFlakes();
- // clear context and save it
- context.canvas.width = window.innerWidth;
- context.canvas.height = window.innerHeight;
- context.clearRect(0, 0, context.canvas.width, context.canvas.height);
- for (var ii = 0; ii < snowflakes.length; ii++) {
- var sf = snowflakes[ii];
- context.globalAlpha = sf.o;
- context.drawImage(
- // image
- snowflakeSprites[sf.si],
- // source x
- 0,
- // source y
- 0,
- // source width
- spriteWidth,
- // source height
- spriteHeight,
- // target x
- sf.x,
- // target y
- sf.y,
- // target width
- sf.sw,
- // target height
- sf.sh);
- }
- }
- function updateBounds() {
- bounds.width = window.innerWidth;
- bounds.height = window.innerHeight;
- }
- function count() {
- return snowflakes.length;
- }
- // increase number of falling snowflakes
- // the default increase is snowflakeCountIncrement
- function add(number) {
- if (!number) {
- number = snowflakes.length * snowflakeCountIncrement;
- }
- generate(number, true);
- }
- // remove some snowflakes
- // by default we remove more aggressively to free resources faster
- function remove(number) {
- if (!number) {
- number = snowflakes.length * snowflakeCountIncrement * snowflakeRemoveFactor;
- }
- if (snowflakes.length - number > 0) {
- snowflakes = snowflakes.slice(0, snowflakes.length - number);
- }
- }
- return {
- "generate": generate,
- "add": add,
- "remove": remove,
- "render": renderFrame,
- "count": count,
- "updateBounds": updateBounds,
- "dynamicSnowflakesCount": dynamicSnowflakesCount
- }
- })();
- // single animation loop and fps calculation
- Animation = (function () {
- "use strict";
- // collection of function to render single frame (snowflakes falling, background gradient animation)
- var frameRenderersCollection = [];
- // each animation should be rendered on corresponding context.
- // If animation doesn't have context (non-visual parameter change every frame) - it should be last (several framerenderers can be last without contexts)
- var renderContextesCollection = [];
- // if animation is running
- var isRunning = false;
- // show debug
- var debug = false;
- // callback pointer for cancelling
- var animationCallback;
- // if browser doesn't support requestAnimationFrame - we use setInterval for 60Hz displays (16.7ms per frame)
- var minInterval = 16.7;
- // fps tracking
- var avgTime = 0;
- var trackFrames = 60;
- var frameCounter = 0;
- // register new renderer and corresponding context
- function addFrameRenderer(frameRender, renderContext) {
- if (frameRender && typeof (frameRender) === "function") {
- frameRenderersCollection.push(frameRender);
- renderContextesCollection.push(renderContext);
- }
- }
- // detecting requestAnimationFrame feature
- function getRequestAnimationFrame(code) {
- if (window.requestAnimationFrame) {
- return window.requestAnimationFrame(code);
- } else if (window.msRequestAnimationFrame) {
- return window.msRequestAnimationFrame(code);
- } else if (window.webkitRequestAnimationFrame) {
- return window.webkitRequestAnimationFrame(code);
- } else if (window.mozRequestAnimationFrame) {
- return window.mozRequestAnimationFrame(code);
- } else {
- return setTimeout(code, minInterval);
- }
- }
- // iterate and render all registered renderers
- function frameRenderCore() {
- var startDate = new Date();
- for (var ii = 0; ii < frameRenderersCollection.length; ii++) {
- if (frameRenderersCollection[ii]) {
- frameRenderersCollection[ii](renderContextesCollection[ii]);
- }
- }
- if (isRunning) {
- animationCallback = getRequestAnimationFrame(frameRenderCore);
- }
- var endDate = new Date();
- var duration = (endDate - startDate);
- avgTime += duration;
- // we count fps every trackFrames frame
- frameCounter++;
- if (frameCounter >= trackFrames) {
- avgTime = avgTime / trackFrames;
- var avgFps = Math.floor(1000 / avgTime);
- if (avgFps > 60) avgFps = 60;
- if (debug === true) {
- // update fps information and snowflake count if dynamic
- console.log({
- fps: avgFps,
- snowflakes: (Snowflakes.dynamicSnowflakesCount) ? Snowflakes.count() : ""
- });
- }
- avgTime = 0;
- frameCounter = 0;
- }
- }
- // playback control: play, pause, toggle
- function start() {
- if (isRunning) return;
- animationCallback = getRequestAnimationFrame(frameRenderCore);
- isRunning = true;
- }
- function stop() {
- if (!isRunning) return;
- clearInterval(animationCallback);
- isRunning = false;
- }
- function toggle() {
- var playbackControl = (isRunning) ? stop : start;
- playbackControl();
- }
- return {
- "addFrameRenderer": addFrameRenderer,
- "start": start,
- "stop": stop,
- "toggle": toggle,
- "getRequestAnimationFrame": getRequestAnimationFrame
- }
- })();
- // Initialization and events code for the app
- (function () {
- "use strict";
- // preparing the elements we'll need further
- var snowflakesCanvas = null;
- var snowflakesContext = null;
- function resizeCanvasElements() {
- // resize falling snowflakes canvas to fit the screen
- Snowflakes.updateBounds();
- }
- function snowInit() {
- snowflakesCanvas = jQuery('<canvas id="snowflakesCanvas" />');
- jQuery('body').prepend(snowflakesCanvas);
- snowflakesCanvas = document.getElementById("snowflakesCanvas");
- snowflakesContext = snowflakesCanvas.getContext("2d");
- // initialiaze the Snowflakes
- Snowflakes.generate(aaSnowConfig.snowflakes);
- // initialize out animation functions and start animation:
- // falling snowflakes
- Animation.addFrameRenderer(Snowflakes.render, snowflakesContext);
- // start the animation
- Animation.start();
- if (aaSnowConfig.play_sound == true) {
- // start audio
- playAudio.init(aaSnowConfig.volume, aaSnowConfig.mp3, aaSnowConfig.ogg);
- playAudio.play();
- }
- if (aaSnowConfig.hideUnderContentBlock != "") {
- var jQSnow = jQuery(snowflakesCanvas);
- var jQContent = jQuery(aaSnowConfig.hideUnderContentBlock),
- zInx = jQSnow.css('z-index');
- // set idle time out
- setIdleTimeout(1000);
- // go to idle function
- document.onIdle = function () {
- jQSnow.show();
- jQSnow.css('z-index', 9999);
- }
- // back from idle function
- document.onBack = function (isIdle) {
- if (isIdle) {
- if (aaSnowConfig.hideUnderContentBlock == false) {
- jQSnow.hide();
- } else {
- jQSnow.css('z-index', -1);
- }
- };
- }
- }
- // properly resize the canvases
- resizeCanvasElements();
- };
- snowInit();
- window.addEventListener("resize", function () {
- // properly resize the canvases
- resizeCanvasElements();
- });
- })();
- $(window).resize(function(){
- setTimeout(function(){
- var width = $(MPP.piano.rootElement).width();
- var height = Math.floor(width * 0.2);
- $(MPP.piano.rootElement).css({marginTop: Math.floor($(window).height() / 2 - height / 2) - $("#snowflakesCanvas").height() + "px"});
- var left = +$(MPP.piano.rootElement).css("margin-left").slice(0, -2);
- var b6Key = MPP.piano.keys.b6.rect;
- $("#garland").css({marginTop: Math.floor($(window).height() / 2 - height / 2) + "px", width: b6Key.x2 + b6Key.w + "px", marginLeft: left + left*50/100});
- },100);
- });
- setTimeout(function(){$(window).resize();},100);
Comments
-
- it didnt work.
-
- Hi. That's strange. When I go to MultiplayerPiano.com or MPPClone.com and paste this script into the console, it runs fine in either case. Can you tell me what's being displayed in the console after you run this script?
Add Comment
Please, Sign In to add comment