Эффект плавно падающего снега на CSS3 | |
Решили на сайте создать красивый эффект, где плавно падающий снег будет идти, то этот материал вам поможет его реализовать, где все работает на CSS. Плюс в этому трюку идет сам обзор, который будет отлично смотреться на темном фоне. Сделано все очень понятно и главное красиво, что по обзору все идет в реальности. Все как будто вы смотрите в окно и за ним идет небольшой снегопад. Это потому, что здесь не будет быстрого хода или много снежинок, как уже в описание сказано, это плавный ход на разнообразные снежинки, что органично можно выставить под любую тематику сайта. Приступаем к установке: Этот код предназначен для размещение на нужных страницах сразу после body: HTML Код #snow_light { height: 100%; left: 0; pointer-events: none; position: fixed; top: 0; width: 100%; z-index: -1; } В стилистике CSS прописывает в низу: JS Код <script type="text/javascript" src="/js/snow_light.js"></script> Нужно скачать архив и там найдете JS файл, который кидаем в корень сайта в папку js. Если у вас светлый фон, но имеется красивый вверх сайта, где присутствуют разная палитра цвета, то можно поставить в этом элементе, что безусловно уже совершенно по другому смотреться будет. Второй вариант: Аналогичный эффект падающего снега, только в другой формаций. HTML Код <canvas id="degkacording" width="1573" height="493"></canvas><br> <button>Переключатель</button> CSS Код #degkacording {background-image: url("Ссылка для фона");} JS Код 'use strict'; var canvas = document.getElementById('degkacording') ,interv = 30 ,Snowflake = function(h){ this.width = canvas.width; this.height = canvas.height; this.vxCommon = .004; this.vyCommon = .0226; this.r = h.r; this.parallax = h.parallax; this.x = h.x; this.y = h.y; this.vx = h.vx; this.vy = h.vy; this.vMelt = .993; }; Snowflake.prototype = { rMin: 1.8 ,rMax: 5 ,plain: .88 * canvas.height //level of plain when flakes are stops }; var rand = function(n, shift){return (shift!=null ? shift : -n/2) + n * Math.random();} ,randRad ,snowflakes = Array.apply(0, Array(120)).map(function(){return new Snowflake({ r: randRad = rand(Snowflake.prototype.rMax, Snowflake.prototype.rMin) ,parallax: randRad *.005 ,x: rand(canvas.width - 2* randRad, randRad) ,y: rand(canvas.height - 2* randRad, randRad - (canvas.height - Snowflake.prototype.plain)) ,vx: rand(.02) ,vy: rand(.02) });}) ,cont = degkacording.getContext('2d'), noStopMotion =1, count=0; cont.fillStyle = 'rgba(170, 177, 205, 0.29)'; cont.fillRect(0, 0, degkacording.width, canvas.height); cont.fillStyle = 'rgba(185, 196, 207, 0.78)'; var startMotion = function(dt2, base_image){ //render all var now = +new Date(); cont.clearRect(0, 0, canvas.width, canvas.height); snowflakes.forEach(function(S, i, arr){ //render flake S.date = S.date || now; var dt = dt2 || now - S.date; if(!(S.y > S.plain - 2 * S.r -2 + (S.r - S.rMin) * (S.height - S.plain) / (S.rMax - S.rMin) )){ S.x += dt * (S.vx + S.vxCommon + S.parallax); S.x -= S.width * (S.x / S.width | 0); S.y += dt * (S.vy + S.vyCommon + S.parallax); S.y -= S.height * (S.y / S.height | 0); S.vx = (S.vx + rand(.002)) * .999; S.vy = (S.vy + rand(.002)) * .999; S.r -= .003 }else{ S.r = S.r * S.vMelt - .003; } if(S.r >0){ cont.beginPath(); cont.arc(S.x, S.y, S.r, 0, 2 * Math.PI, !1); cont.fill(); }else{ S.r = rand(S.rMax, S.rMin); S.y =0; } //console.log(S.vx) S.date = now; count++; }); noStopMotion && setTimeout(startMotion, interv); }; setTimeout(function(){console.log('count', count /10);}, 10000); document.querySelector('button').addEventListener('click',function(){if(noStopMotion = noStopMotion ?0:1) startMotion(3* interv)},!1); startMotion(null); PS - во втором варианте в стилистике установлен только один фон, для можете посмотреть полностью эффект на Demo странице, где у вас появляется возможность выбрать какой то вариант, тот что считаете больше подойдет для сайта. Демонстрация |
Поделиться в социальных сетях
Материал разместил