<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>库存曲线</title></head><body onload="draw()"><canvas id="myCanvus" width="840px" height="240px" style="border:1px dashed black;">出现文字表示你的浏览器不支持HTML5</canvas></body>
</html>
<script type="text/javascript">
<!--function draw(){var canvas=document.getElementById("myCanvus");var canvasWidth=840;var canvasHeight=240;var context=canvas.getContext("2d");context.fillStyle = "white";context.fillRect(0, 0, canvasWidth, canvasHeight);context.strokeStyle = "black";context.fillStyle = "black";context.save();// 进行坐标变换:把原点放在左下角,东方为X轴正向,北方为Y轴正向var offset=20;// 偏移值,用来画坐标轴
context.save();context.translate(0+offset,canvasHeight-offset);context.rotate(getRad(180));context.scale(-1,1);        drawAxisX(context);drawAxisY(context);var actualStock=100;var inbounds=[50,0,50,0,50,0,50,0,50,0,90,0,90,0,90,0,90,0,];var outbounds=[0,70,0,70,0,70,0,70,0,70,0,70,0,70,0,70,0,70,];drawStockCurve(context,actualStock,inbounds,outbounds);drawBounds(context);context.restore();context.fillText("每日库存变化折线",400,50);context.fillText("库存",10,20);context.fillText("日期",800,235);}function drawBounds(ctx){ctx.save();ctx.lineWidth=0.5;ctx.strokeStyle='red';// 画underage
        ctx.beginPath();ctx.moveTo(0, 25);ctx.lineTo(800, 25);ctx.stroke();ctx.closePath();ctx.save();ctx.translate(-10,25);ctx.rotate(getRad(180));ctx.scale(-1,1);ctx.fillText("告罄",0,0);ctx.restore();ctx.restore();ctx.save();ctx.lineWidth=0.5;ctx.strokeStyle='red';// 画underage
        ctx.beginPath();ctx.moveTo(0, 125);ctx.lineTo(800, 125);ctx.stroke();ctx.closePath();ctx.save();ctx.translate(-10,125);ctx.rotate(getRad(180));ctx.scale(-1,1);ctx.fillText("超储",0,0);ctx.restore();ctx.restore();}function drawStockCurve(ctx,actualStock,inbounds,outbounds){ctx.save();ctx.lineWidth=1;ctx.strokeStyle='black';ctx.fillStyle='black';var y=actualStock;var x;ctx.beginPath();for(var i=0;i<inbounds.length;i++){y=y+inbounds[i]-outbounds[i];x=i*50;ctx.lineTo(x, y);ctx.save();// 因坐标变换会导致文字错位,故采用位移+旋转+缩放的方式恢复
            ctx.translate(x,y);ctx.rotate(getRad(180));ctx.scale(-1,1);ctx.fillText("("+i+","+y+")",0,0);ctx.restore();}ctx.stroke();ctx.closePath();ctx.restore();}function drawAxisX(ctx){ctx.save();ctx.lineWidth=0.5;ctx.strokeStyle='navy';ctx.fillStyle='navy';// 画轴
        ctx.beginPath();ctx.moveTo(0, 0);ctx.lineTo(800, 0);ctx.stroke();ctx.closePath();ctx.beginPath();ctx.moveTo(800-Math.cos(getRad(15))*10, Math.sin(getRad(15))*10);ctx.lineTo(800, 0);ctx.lineTo(800-Math.cos(getRad(15))*10, -Math.sin(getRad(15))*10);ctx.stroke();ctx.closePath();// 画刻度var x,y;y=5;for(x=50;x<800;x+=50){ctx.beginPath();ctx.moveTo(x, 0);ctx.lineTo(x, y);ctx.stroke();ctx.closePath();}// 写文字var i=0;for(x=0;x<800;x+=50){ctx.save();ctx.scale(1,-1);ctx.fillText(i,x,y+10);ctx.restore();i++;}ctx.restore();}function drawAxisY(ctx){ctx.save();ctx.lineWidth=0.5;ctx.strokeStyle='navy';ctx.fillStyle='navy';// 画轴
        ctx.beginPath();ctx.moveTo(0, 0);ctx.lineTo(0, 200);ctx.stroke();ctx.closePath();ctx.beginPath();ctx.moveTo(Math.sin(getRad(15))*10, 200-Math.cos(getRad(15))*10);ctx.lineTo(0, 200);ctx.lineTo(-Math.sin(getRad(15))*10, 200-Math.cos(getRad(15))*10);ctx.stroke();ctx.closePath();// 画刻度var x,y;x=5;for(y=50;y<200;y+=50){ctx.beginPath();ctx.moveTo(x, y);ctx.lineTo(0, y);ctx.stroke();ctx.closePath();}// 写文字
        x=-19;for(y=50;y<200;y+=50){ctx.save();ctx.scale(1,-1);ctx.translate(0,-200);ctx.fillText(200-y,x,y);ctx.restore();}ctx.restore();}function getRad(degree){return degree/180*Math.PI;
    }
//-->
</script>

转载于:https://www.cnblogs.com/xiandedanteng/p/7594559.html

HTML5 Canvas 绘制库存变化折线 增加超储告罄线相关推荐

  1. HTML5 Canvas 绘制库存变化折线 计算出库存周转率

    <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type&quo ...

  2. h5的横线_使用HTML5 Canvas绘制直线或折线等线条的方法讲解

    HTML5 Canvas基本概念讲解html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏 ...

  3. html5 canvas绘制图形,html5 Canvas绘制图形入门详解

    html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome. ...

  4. html5时间画布走动,javascript+HTML5 canvas绘制时钟功能示例

    本文实例讲述了javascript+HTML5 canvas绘制时钟功能.分享给大家供大家参考,具体如下: 效果如下: 代码: www.jb51.net canvas绘制时钟 div{text-ali ...

  5. HTML5 canvas绘制雪花飘落动画(需求分析、知识点、程序编写分布详解)

    HTML5 canvas绘制雪花飘落动画(需求分析.知识点.程序编写分布详解) 原文:HTML5 canvas绘制雪花飘落动画(需求分析.知识点.程序编写分布详解) 看到网上很多展示html5雪花飞动 ...

  6. html新增和删除行,html5页面结构的变化以及增加和删除标签的总结

    这篇文章给大家介绍的内容是关于html5页面结构的变化以及增加和删除标签的总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 页面结构 传统页面结构 html5页面结构 eg 新增标 ...

  7. 在html画一个自动缩放圆环,使用html5 canvas绘制圆环动效

    最近笔者有个需求,需求内容为:一组文字显示在圆环的周围,用户可添加文字,文字围绕着圆环,每个词对应圆环周围的的蓝色小圆点,当用户鼠标放在圆环上方小蓝点时时,实现放射出三角形,再显示出文字,先看看动图效 ...

  8. html中canvas设置透明度,HTML5 Canvas绘制时指定颜色与透明度的方法

    这篇文章主要介绍了HTML5 Canvas绘制时指定颜色与透明度的方法,包括全局透明globalAlpha属性的介绍,需要的朋友可以参考下 指定颜色 黑色是Canvas绘制的默认色彩,要想换一种颜色的 ...

  9. java canvas 画图片_[Java教程][HTML5] Canvas绘制简单图片

    [Java教程][HTML5] Canvas绘制简单图片 0 2016-05-13 13:00:04 获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象 ...

最新文章

  1. java typeof_js中typeof的用法汇总
  2. Day 2: AngularJS —— 对AngularJS的初步认识
  3. Python2和Python3中除法运算符的区别有哪些?你都知道吗?
  4. 卷积神经网络CNN是靠什么线索学习到深度信息的?
  5. Linux系统的启动过程(转)
  6. 2020-08-17每日一句
  7. 判断360浏览器极速和兼容模式
  8. html面试信息登记表
  9. 黑马2021最新版 SpringCloud基础篇全技术栈导学(RabbitMQ+Docker+Redis+搜索+分布式)
  10. python免费自学爬虫_看这里!免费python网络爬虫一站通
  11. 如何区分网线是几类的_如何判断网线是几类线?
  12. 汉字字形码是计算机用来实现对汉字的输出,汉字编码字形码
  13. 李嘉诚:没有人愿意贫穷,但出路在哪(转自意林)
  14. php64转码,Base64的编码转换方式
  15. MySQL的关键技术及主要特征_生物特征识别十大关键技术解析
  16. 工资重要还是五险一金重要
  17. 服务器电脑上保存的文件找不到了,保存在电脑上的word文件突然找不到怎么办?该如何找回来...
  18. linux下面安装和配置nginx
  19. Matlab中读取excel表格数据
  20. ZYNQ 千兆以太网 学习

热门文章

  1. Json在线格式化站点
  2. 为Windows mobile编写设计友好的控件[Writing designer friendly controls for Windows Mobile]
  3. VML编程之------VML语言入门《VML极道教程》原著:沐缘华
  4. 和方舟rust一样的手游_方舟生存进化手游2.0版本的泰克科技有多强?恐龙大军都顶不住...
  5. java对象转json字符串日期格式_fastJSON字符串类型数据中的日期转换为Java bean的日期对象...
  6. 几十万的词如何用每页500词分页展示_如何写出一份优秀的应届生简历?
  7. 虚拟机无法连接以太网
  8. 冒泡排序汇总(整数,实数,字符,字符串)
  9. java win8 mac地址_Win8怎么查看MAC地址_Win8查看电脑MAC地址方法-192路由网
  10. 廖的python教程_廖雪峰的Python3.x教程.pdf