Гость !!! | RSS
Сегодня на сайте
Новые сообщения Участники Правила форума Поиск RSS
  • Страница 1 из 1
  • 1
Модератор форума: Khufu  
Форум » Скрипты » Эффекты..., трюки... » Водопад на Canvas
Водопад на Canvas
« Emilia » Дата: Пятница, 03 Мая 2013, 17:33:58 | Сообщение # 1
Tomorrow - not will today!
Emilia
«Администратор»
Сообщений: 43
Замечания: ±
Статус Настроения: [редактировать]
Отсутствует

Эффекты на Canvas – это искусство. Один из таких водопад на Canvas - Красота необыкновенная.

Этим можно украсить свое приложение, написанное на HTML5.
Использовать рекомендуется для оживления фотографий водопада путем наложения Canvas слоя на него.

CSS-Код:
Код
<style>
body {background: #222;}
#container {box-shadow:inset 0 1px 0 #444, 0 -1px 0 #000; height:140px; left:50%; margin: -70px 0 0 -60px; position:absolute; top:50%; width:120px;}
canvas {display:block; margin:0 auto;}
</style>

HTML-Код:
Код
<div id="container">
     <canvas id="waterfall"></canvas>
</div>

JavaScript-Код:
Код
<script>
     var waterfallCanvas = function(c, cw, ch){
         
     var _this = this;
     this.c = c;
     this.ctx = c.getContext('2d');
     this.cw = cw;
     this.ch = ch;     
         
     this.particles = [];
     this.particleRate = 6;
     this.gravity = .15;
         
     this.init = function(){     
     this.loop();
     };
         
     this.reset = function(){     
     this.ctx.clearRect(0,0,this.cw,this.ch);
     this.particles = [];
     };
         
     this.rand = function(rMi, rMa){return ~~((Math.random()*(rMa-rMi+1))+rMi);};
         
     this.Particle = function(){
     var newWidth = _this.rand(1,20);
     var newHeight = _this.rand(1, 45);
     this.x = _this.rand(10+(newWidth/2), _this.cw-10-(newWidth/2));
     this.y = -newHeight;
     this.vx = 0;
     this.vy = 0;
     this.width = newWidth;
     this.height = newHeight;
     this.hue = _this.rand(200, 220);
     this.saturation = _this.rand(30, 60);
     this.lightness = _this.rand(30, 60);
     };
         
     this.Particle.prototype.update = function(i){
     this.vx += this.vx;     
     this.vy += _this.gravity;
     this.x += this.vx;
     this.y += this.vy;     
     };
         
     this.Particle.prototype.render = function(){     
     _this.ctx.strokeStyle = 'hsla('+this.hue+', '+this.saturation+'%, '+this.lightness+'%, .05)';
     _this.ctx.beginPath();
     _this.ctx.moveTo(this.x, this.y);
     _this.ctx.lineTo(this.x, this.y + this.height);
     _this.ctx.lineWidth = this.width/2;
     _this.ctx.lineCap = 'round';
     _this.ctx.stroke();
     };
         
     this.Particle.prototype.renderBubble = function(){     
     _this.ctx.fillStyle = 'hsla('+this.hue+', 40%, 40%, 1)';
     _this.ctx.fillStyle = 'hsla('+this.hue+', '+this.saturation+'%, '+this.lightness+'%, .3)';
     _this.ctx.beginPath();
     _this.ctx.arc(this.x+this.width/2, _this.ch-20-_this.rand(0,10), _this.rand(1,8), 0, Math.PI*2, false);
     _this.ctx.fill();
     };
         
     this.createParticles = function(){
     var i = this.particleRate;
     while(i--){
     this.particles.push(new this.Particle());
     }
     };
         
     this.removeParticles = function(){
     var i = this.particleRate;
     while(i--){
     var p = this.particles[i];
     if(p.y > _this.ch-20-p.height){
     p.renderBubble();
     _this.particles.splice(i, 1);
     }     
     }
     };
         
     this.updateParticles = function(){     
     var i = this.particles.length;     
     while(i--){
     var p = this.particles[i];
     p.update(i);     
     };     
     };
         
     this.renderParticles = function(){
     var i = this.particles.length;     
     while(i--){
     var p = this.particles[i];
     p.render();     
     };     
     };
         
     this.clearCanvas = function(){     
     this.ctx.globalCompositeOperation = 'destination-out';
     this.ctx.fillStyle = 'rgba(255,255,255,.06)';
     this.ctx.fillRect(0,0,this.cw,this.ch);
     this.ctx.globalCompositeOperation = 'lighter';
     };
         
     this.loop = function(){
     var loopIt = function(){     
     requestAnimationFrame(loopIt, _this.c);     
     _this.clearCanvas();     
     _this.createParticles();     
     _this.updateParticles();     
     _this.renderParticles();     
     _this.removeParticles();
     };
     loopIt();     
     };
         
     };
         
     var isCanvasSupported = function(){
     var elem = document.createElement('canvas');
     return !!(elem.getContext && elem.getContext('2d'));
     };
         
     var setupRAF = 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);
     };
     };
     };     
         
     if(isCanvasSupported()){
     var c = document.getElementById('waterfall');
     var cw = c.width = 100;
     var ch = c.height = 140;     
     var waterfall = new waterfallCanvas(c, cw, ch);     
     setupRAF();
     waterfall.init();
     }
</script>

Параметры ширины и высоты:
Цитата
var cw = c.width = 160; // ширина
var ch = c.height = 200; // высота




Как лист от дерева оторван – ветрами уносима. Я больше не вернусь
 
Форум » Скрипты » Эффекты..., трюки... » Водопад на Canvas
  • Страница 1 из 1
  • 1
Поиск:
мини-чат
Tagis Балаболка
Инфо сайта
Инфо форума

Все права защищены! shalbuzdag-666.ucoz.ru © 2009 – 2024 ()
уЧётчик сайта