js制作的模拟超逼真下雨效果

一层秋雨一层凉。

小楼一夜听春雨。

虞美人·听雨

少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。

而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。

我是那迷恋微雨的过客。想着用js的代码在代码的世界里重现雨的时光。我搜集了很多的关于模拟下雨效果的代码。先上图:

暗夜下的雨,


js制作的超逼真下雨效果 (mubanmao.top)icon-default.png?t=M7J4http://mubanmao.top/content/preview/ead3b804-4ac0-42c1-9923-0064d90e2e45

伴着电闪雷鸣的,雷雨

js逼真模拟下大雨风雨交加效果带声音 (mubanmao.top)icon-default.png?t=M7J4http://mubanmao.top/content/preview?id=540adcaa-f801-4db8-bc39-fb698a801a73

亦或者3D世界里面的逼真的雨滴效果:

js逼真模拟农场森林下雨效果 (mubanmao.top)icon-default.png?t=M7J4http://mubanmao.top/content/preview?id=39e27150-54e8-41f0-9ada-4e2a3ea69a78

还有更多的效果,请来我的世界查找:

 

模拟下雨的

// Rain.js
(function(window, undefined) {
  if (typeof Raphael == 'undefined') throw "Rain needs Rapha毛l.js!";

  Rain = function(element, speed, angle) {
    if (!(this instanceof arguments.callee)) { return new arguments.callee(arguments); };
    var self = this;

    self.init = function(element, config) {
      var defaults = {speed: 500, angle: 20, intensity: 5, size: 10, color: '#fff'};
      if (typeof config == 'undefined') {
        config = defaults;
      } else {
        for (var property in defaults) {
          if (typeof config[property] == 'undefined') config[property] = defaults[property];
        };
      }
      self.config = config;
      var elt = document.getElementById(element);
      self.stage = {
          element:  elt,
          width:    function() { return elt.getBoundingClientRect().width; },
          height:   function() { return elt.getBoundingClientRect().height; }
        };
      self.canvas = Raphael(self.stage.element);
      self.offset = (Math.tan(config.angle * Math.PI / 180) * self.stage.height());
      runEngine();
      return self;
    };

    function runEngine() {
      self.enginePid = setInterval(function() { createDrop(self.config); }, 100 / self.config.intensity);
    }

    function randomStartingPoint(angle) {
      return Math.floor(Math.random() * (self.stage.width() + self.offset));
    }

    function createPositionMatrix(angle, size) {
      return [randomStartingPoint(angle), 0, size * 0.1, size];
    }

    function createDrop(config) {
      var factor = Math.random(),
        positionMatrix = createPositionMatrix(config.angle, config.size),
        drop = self.canvas.ellipse.apply(self.canvas, positionMatrix),
        layer = config.speed * (1 + factor),
        cx = positionMatrix[0] - (Math.tan(config.angle * Math.PI / 180) * self.stage.height());
      drop
        .attr({stroke: config.color, opacity: 1 - factor, fill: config.color})
        .rotate(config.angle)
        .animate({cy: self.stage.height(), cx: cx}, layer, function() { drop.remove(); });
      return drop;
    }

    // "class" methods
    self.setIntensity = function(intensity) {
      clearInterval(self.enginePid);
      self.config.intensity = intensity;
      self.enginePid = setInterval(function() { createDrop(self.config); }, 100 / self.config.intensity);
    };

    window.onresize = function() { self.canvas.setSize(window.innerWidth, window.innerHeight); };

    return self.init.apply(self, arguments);
  };
})(window);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值