1
0
mirror of https://gitee.com/lvyeyou/DaShuJuZhiDaPingZhanShi.git synced 2025-06-17 03:34:05 +08:00
郎大伟 5f7ac2f666 新增智慧气象主题
新增气象预报大数据平台模板
2020-01-03 09:12:25 +08:00

183 lines
5.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 2017.7.24
* author:acdSeen
* */
(function(window,factory){
if(typeof define === "function" && define.amd){
//AMD
define(factory);
}else if(typeof module === "object" && module.exports){
//CMD
module.exports = factory();
}else{
//window
window.WaterPolo = factory();
}
}(typeof window !== "undefined" ? window : this, function(selector,userOptions){
//采用window作为参数传入将功能函数挂载到window上
var WaterPolo=function(selector,userOptions){
'user strict';
userOptions=userOptions||{};
var options={
//容器距边缘的距离
wrapW:3,
//canvas属性
cW:300,
cH:300,
lineWidth : 2,
//液面位置 百分比表示
baseY: 20,
//页面起始位置
nowRange: 0,
//线条颜色
lineColor:'rgb(176,204,53)',
//上层颜色
oneColor:'rgba(176,204,53,.6)',
//下层颜色
twoColor:'rgba(176,204,53,.4)',
//上层波浪宽度,数越小越宽
oneWaveWidth:0.06,
//下层波浪宽度
twoWaveWidth:0.06,
//上层波浪高度,数越大越高
oneWaveHeight:4,
//下层波浪高度
twoWaveHeight:4,
//上层波浪x轴偏移量
oneOffsetX:10,
//下层波浪x轴偏移量
twoOffsetX:20,
//波浪滚动速度,数越大越快
speed:0.2
};
var canvas = null,
ctx = null,
W = null,
H = null;
Object.defineProperty(this, 'options', {
get: function() {
return options;
},
set: function(value) {
mergeOption(value,options);
}
});
//参数混合相当于$.extend([old],[new])
var mergeOption=function(userOptions,options){
Object.keys(userOptions).forEach(function(key){
options[key]=userOptions[key];
})
};
//生成液面
var makeLiquaid=function(ctx,xOffset,waveWidth,waveHeight,color){
ctx.save();
var points = [];//用于存放绘制Sin曲线的点
ctx.beginPath();
//在x轴上取点
for (var x = 0; x < options.cW; x += 20 / options.cW) {
//此处坐标(x,y)的取点,依靠公式 “振幅高*sin(x*振幅宽 + 振幅偏移量)”
var y = -Math.sin(x * waveWidth + xOffset);
//液面高度百分比改变
var dY = options.cH * (1 - options.nowRange / 100);
points.push([x, dY + y * waveHeight]);
ctx.lineTo(x, dY + y * waveHeight);
}
//封闭路径
ctx.lineTo(options.cW, options.cH);
ctx.lineTo(0, options.cH);
ctx.lineTo(points[0][0], points[0][1]);
ctx.fillStyle = color;
ctx.fill();
ctx.restore();
};
//初始化设置
var init=function(){
mergeOption(userOptions,options);
canvas=document.getElementById(selector);
ctx=canvas.getContext('2d');
canvas.width=options.cW;
canvas.height=options.cH;
ctx.lineWidth=options.lineWidth;
//圆属性
var r = options.cH / 2; //圆心
var cR = r - 6; //圆半径 决定圆的大小
var drawCircle = function(ctx){
ctx.beginPath();
ctx.strokeStyle = options.lineColor;
ctx.arc(r, r, cR+options.wrapW, 0, 2 * Math.PI);
ctx.stroke();
ctx.beginPath();
ctx.arc(r, r, cR, 0, 2 * Math.PI);
ctx.clip();
};
drawCircle(ctx);//画圆
(function drawFrame(){
window.requestAnimationFrame(drawFrame);
ctx.clearRect(0, 0, options.cW, options.cH);
//高度改变动画参数
if (options.nowRange <= options.baseY) {
var tmp = 1;
options.nowRange += tmp;
}
if (options.nowRange > options.baseY) {
var tmp = 1;
options.nowRange -= tmp;
}
makeLiquaid(ctx,options.oneOffsetX,options.oneWaveWidth,options.oneWaveHeight,options.oneColor);
makeLiquaid(ctx,options.twoOffsetX,options.twoWaveWidth,options.twoWaveHeight,options.twoColor);
options.oneOffsetX+=options.speed;
options.twoOffsetX+=options.speed;
}());
};
init();
};
return WaterPolo;
}));