一层秋雨一层凉。
小楼一夜听春雨。
虞美人·听雨
少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。
而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。
我是那迷恋微雨的过客。想着用js的代码在代码的世界里重现雨的时光。我搜集了很多的关于模拟下雨效果的代码。先上图:
暗夜下的雨,

js制作的超逼真下雨效果 (mubanmao.top)
http://mubanmao.top/content/preview/ead3b804-4ac0-42c1-9923-0064d90e2e45
伴着电闪雷鸣的,雷雨

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

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

模拟下雨的
- // 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);