canvas绘制柱状图和、绘制形状中心旋转

<!DOCTYPE html>
<html ng-app="">
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <canvas id="cvs" width="400" height="300">不支持</canvas>
    <script>
        var cvs = document.getElementById(‘cvs‘);
        var ctx = cvs.getContext(‘2d‘);
        ctx.strokeStyle = ‘blue‘;
        ctx.lineWidth = ‘2‘;
        //设置原点
        var original = {x:40,y:260};
        //设置坐标
        var bottomRight = {x:360,y:260};
        var bottomTop = {x:40,y:40};
        ctx.beginPath();
        //X轴
        ctx.moveTo(original.x,original.y);
        ctx.lineTo(bottomRight.x,bottomRight.y);
        ctx.lineTo(bottomRight.x-15,bottomRight.y-10);
        ctx.moveTo(bottomRight.x-15,bottomRight.y+10);
        ctx.lineTo(bottomRight.x,bottomRight.y);
        //Y轴
        ctx.moveTo(original.x,original.y);
        ctx.lineTo(bottomTop.x,bottomTop.y);
        ctx.lineTo(bottomTop.x+10,bottomTop.y+15);
        ctx.moveTo(bottomTop.x-10,bottomTop.y+15);
        ctx.lineTo(bottomTop.x,bottomTop.y);
        var avgWidth = 58;
        var rectWidth = 36;
        for(var i=0;i<5;i++){      //如果i==0,不绘制刻度
            if(i>0){
                ctx.moveTo(original.x+avgWidth*i,original.y);
                ctx.lineTo(original.x+avgWidth*i,original.y-10);
            }
            //柱状的X坐标
            var rectX = avgWidth*i+(avgWidth-rectWidth)/2;
            //柱状的高度
            var rectH = Math.floor(Math.random()*260);
            //绘制柱状图(X坐标,Y坐标,宽度,高度)
            ctx.fillRect(original.x+rectX,original.y-rectH,rectWidth,rectH);
        }

        ctx.stroke();
    </script>
</body>
</html>
如何是形状中心旋转
<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
</head>
<body>
<h2>如何是形状中心旋转</h2>
<canvas id="cvs"></canvas>
<script>
  //1.获取画布
  var cvs = document.getElementById(‘cvs‘);
  //2.获取上下文
  var ctx = cvs.getContext(‘2d‘);

  //6.如何制作动画
  setInterval(draw,20);

  //7.偏移画布:重新设置画布原点0,0
  //结论:1)偏移量,宽和高分别是图形宽和高的一般
  //结论:2)图形位置要设置成偏移量*-1
  ctx.translate(100,50);

  //绘制函数:每20毫秒会执行一次
  function draw(){
    //3.橡皮清空画布
    ctx.clearRect(-200,-150,400,300);
    //4.普及数学角度和弧度
    //弧度和角度换算公式:弧度 = 角度 * Math.PI / 180
    //旋转30度
    ctx.rotate(1*Math.PI/180);
    //5.绘制一个矩形,位于0,0 ,宽高100
    ctx.fillRect(-100,-50,200,100);
  }
</script>
</body>
</html>

幸运转盘旋转案例:


<!DOCTYPE html>
<html ng-app="">
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        #lotteryContainer {
            text-align: center;
        }
        #startLottery{
            width: 280px;
            height: 3em;
            border: 1px solid #aaaaaa;
            border-radius: 8px;
            cursor: pointer;
            margin: 10px 0;
            outline: 0;
        }
        #startLottery:hover{
            background: #ccc;
        }
    </style>
    <script src="jquery-1.11.1.js"></script>
</head>
<body>
<!--幸运转盘-->
<div id="lotteryContainer">
    <canvas id="cvs" width="500" height="500"></canvas><br>
    <!--启动按钮-->
    <button id="startLottery">加载中...</button>
</div>
<script>
    var asImgLoaded = false;//标识符 指明转盘素材加载完成与否
    var pinImgLoaded = false;//指明指针加载完成与否
    var asImg;//圆盘图片对象
    var pinImg;//指针图片对象
    $(function(){
        //大转盘的图片
        asImg = new Image();
        asImg.src = ‘img/as.png‘;
        //确认图片加载完成
        asImg.onload = function(){
            asImgLoaded = true;
            //判断指针加载完成执行初始化
            if(pinImgLoaded == true){
                initLottery();
            }
        }
        //指针图片
        pinImg = new Image();
        pinImg.src = ‘img/pin.png‘;
        pinImg.onload = function(){
            pinImgLoaded = true;
            //判断圆盘加载完成执行初始化
            if(asImgLoaded == true){
                initLottery();
            }
        }
    });
    function initLottery(){
        //初始化按钮
        $(‘#startLottery‘).html(‘开始抽奖‘).click(function(){
            //生成一个随机的旋转时间,该时间在4000-9000毫秒之间
            var duration = (Math.random()*4+4)*1000;
            //转盘的开始旋转时间
            var startTime = new Date().getTime();

           //定义一个画布角度的变量,保存当前应当旋转的度数
            var angle = 0;//已经旋转过的角度,初始为0,表示不旋转
            //开始抽奖,转盘启动
            var timer = setInterval(function(){
                ctx.clearRect(-cw/2,-ch/2,cw,ch);
                //绘制圆盘和指针
                //1.旋转画布
                angle += 5;//记录转盘当前的旋转度数值
                ctx.rotate(angle*Math.PI/180);
                //2.画圆盘
                ctx.drawImage(asImg,-cw/2,-ch/2);
                //3.反向旋转画布
                ctx.rotate(-angle*Math.PI/180);
                //4.画指针
                ctx.drawImage(pinImg,-cw/2+80,-ch/2+90);
                //判断是否应该停止旋转了
                var now = new Date().getTime();
                if(now-startTime > duration){
                    //停止定时器
                    clearInterval(timer);
                }
            },20);
        });
        //将转盘和指针绘制到canvas
        var cvs = $(‘#cvs‘)[0];
        var ctx = cvs.getContext(‘2d‘);
        //画布的款高
        var cw = cvs.width;
        var ch = cvs.height;
        //设置偏移
        ctx.translate(cw/2,ch/2);
        //画圆盘
        ctx.drawImage(asImg,-cw/2,-ch/2);
        ctx.drawImage(pinImg,-cw/2+80,-ch/2+90);
    }
</script>
</body>
</html>
时间: 2024-10-12 15:24:46

canvas绘制柱状图和、绘制形状中心旋转的相关文章

167天:canvas绘制柱状图

canvas绘制柱状图 1.HTML 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> 6 &l

JavaScript+canvas 利用贝塞尔曲线绘制曲线

效果图: <body> <canvas id="test" width="800" height="300"></canvas> <script type="text/javascript"> //一个工具函数,用于将角度从角度制转化成弧度制 function rads(x){ return Math.PI*x/180;} var canvas = document.getEle

14-canvas绘制柱状图

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>14-Canvas绘制柱状图</title> 6 <style> 7 *{ 8 margin: 0; 9 padding: 0; 10 } 11 canvas{ 12 display: block; 13 margin: 0

Canvas:橡皮筋线条绘制

Canvas:橡皮筋线条绘制 效果演示 实现要点 事件监听 [说明]: 在Canvas中检测鼠标事件是非常简单的,可以在canvas中添加一个事件监听器,当事件发生时,浏览器就会调用这个监听器. 我们可以使用绑定事件属性: canvas.onmousedown = function(e) { //..... } 此外,也可以使用更为通用的addEventListener()方法来注册监听器: canvas.addEventListener('mousedown',function(e){ //.

使用matplotlib中的bar函数绘制柱状图

使用柱状图显示三日电影的票房信息 要显示的数据为2018年12月7日-9日四场电影的票房信息 四场电影分别为:无名之辈,狗十三,毒液:知名守卫者,憨豆特工3 2018年12月7日四场电影票房分别为:[991.94, 375.64, 200.48, 73.27] 2018年12月8日四场电影票房分别为:[1908.22, 547.61, 466.23, 193.8] 2018年12月9日四场电影票房分别为:[1532.87, 525.63, 332.35, 170.57] 本次绘图思路: 1.x轴

python 绘制柱状图

import matplotlib.pyplot as plt import numpy as np # 创建一个点数为 8 x 6 的窗口, 并设置分辨率为 80像素/每英寸 plt.figure(figsize=(8, 6), dpi=80) # 再创建一个规格为 1 x 1 的子图 plt.subplot(1, 1, 1) # 柱子总数 N = 6 # 包含每个柱子对应值的序列 values = (25, 32, 34, 20, 41, 50) # 包含每个柱子下标的序列 index =

赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印

上一篇已经介绍了Android种Bitmap和Canvas的使用,下面我们来写一个具体实例 http://blog.csdn.net/zhaoyazhi2129/article/details/32136179 运行效果: 主要代码 package com.example.guaguale; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import and

canvas 实现 柱状图

define([],function(){ var myChart={ init:function(options){ this.ctx = options.ctx; this.data = options.data; this.yInterval =options.yInterval||10; this.marginX=options.marginX||8 this.w1=options.w1||25 this.ox=options.ox||30 this.yearMoney=options.

canvas浅谈 实现简单的自旋转下落

旋转和平移是2个基础的动画效果,也是复杂动画的基础. 如果是普通的页面只要设置transform属性很容易实现平移+旋转的组合效果,达到自旋转下落的效果.因为操作的直接是动作元素本身很容易理解. 但是在canvas中,如果要实现一个旋转,是需要旋转画布来实现. 如下图: 实现代码 function createRect() { var anger = 0,//旋转角度 rectW = 200,//宽度 rectH = 200,//高度 posy = 0; cxt.strokeStyle = 'b