canvas---绘制图表以及拖拽

摘要:
1.clientX、offsetX、screenX、pageX和x.clientX之间的差异,clientY:当前身体查看区域pageX的点击位置的x和y坐标,pageY:整个页面,包括滚动身体部分screenX的长度,screenY:当前计算机屏幕offsetX的点击位置的x和y坐标,offsetY:具有定位的父框的x和y坐标与screenX和screenY相同

1.clientX、offsetX、screenX、pageX、x的区别

  • clientX、clientY:点击位置距离当前body可视区域的x,y坐标
  • pageX、pageY:对于整个页面来说,包括了被卷去的body部分的长度
  • screenX、screenY:点击位置距离当前电脑屏幕的x,y坐标
  • offsetX、offsetY:相对于带有定位的父盒子的x,y坐标
  • x、y:和screenX、screenY一样 
2.设置canvas容器
 <div style="position:relative;">
        <canvas     height="500"
            style="border:1px solid yellow;position:absolute;left:100px;"></canvas>
  </div>

3.绘制canvas并进行拖拽

 var can = document.getElementById("can");
    var ctx = can.getContext("2d");

    //初始化一个圆
    createBlock(150, 350);
    //创建圆滑块
    function createBlock(a, b) {
        ctx.beginPath();
        line()
        ctx.beginPath();
        ctx.fillStyle = "red";
        ctx.arc(a, b, 30, 0, Math.PI * 2);
        ctx.strokeStyle = "red";
        ctx.moveTo(0, 500);
        ctx.lineTo(a, b);
        ctx.stroke();
        ctx.moveTo(100, 500);
        ctx.lineTo(a, b);
        ctx.stroke(); // Draw it
    }
    //鼠标按下,将鼠标按下坐标保存在x,y中  

    can.onmousedown = function (ev) {
        var e = ev || event;
        // var x = e.clientX;
        // var y = e.clientY;
        var x = e.offsetX;
        var y = e.offsetY;
        drag(x, y);
        // console.log(x, y)
    };
    // 画坐标表格
    function line() {
        for (var i = 1; i < 50; i++) {
            ctx.beginPath();
            ctx.lineWidth = "1";
            ctx.strokeStyle = "#000"; // Green path
            ctx.moveTo(0, (i - 1) * 10);
            ctx.lineTo(500, (i - 1) * 10);
            ctx.stroke();
            i = i + 5
        }
        for (var i = 1; i < 50; i++) {
            ctx.beginPath();
            ctx.lineWidth = "1";
            ctx.strokeStyle = "#000"; // Green path
            ctx.moveTo((i - 1) * 10, 0);
            ctx.lineTo((i - 1) * 10, 500);
            ctx.stroke();
            i = i + 5
        }
    };
    //拖拽函数
    function drag(x, y) {
        // 按下鼠标判断鼠标位置是否在圆上,当画布上有多个路径时,isPointInPath只能判断最后那一个绘制的路径
        // sPointInPath判断点是不是在路径中
        // 如果鼠标的坐标x,y是在圆上,则拖动
        if (ctx.isPointInPath(x, y)) {
            // console.log(x, y)
            //路径正确,鼠标移动事件
            ctx.beginPath();
            can.onmousemove = function (ev) {
                var e = ev || event;
                // var ax = e.clientX;
                // var ay = e.clientY;
                var ax = e.offsetX;
                var ay = e.offsetY;
                //鼠标移动每一帧都清楚画布内容,然后重新画圆
                ctx.clearRect(0, 0, can.width, can.height);
                createBlock(ax, ay);
            };
            //鼠标松开事件
            can.onmouseup = function () {
                can.onmousemove = null;
                can.onmouseup = null;
            };
        };
    }

免责声明:文章转载自《canvas---绘制图表以及拖拽》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java文件上传js 把字符串保存为txt文件,并下载到本地下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

swiper横向轮播(兼容IE8)

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <link rel="stylesheet"href="idangerous.swiper.cs...

C# 获取当前屏幕的宽高和位置

上一篇博客《C# 获取当前屏幕DPI》,介绍了如何获取当前屏幕的DPI设置 本章主要介绍如何获取当前窗口所在屏幕的信息 当前屏幕信息 如果当前是单屏幕,可以直接获取主屏幕 var primaryScreen = Screen.PrimaryScreen; 如果当前是多屏,建议通过窗口句柄获取Screen信息 var window = Win...

layui上传文件前加入确认提示

//上传文件 upload: function() { layui.use('upload', function() { var upload =layui.upload; //执行实例 var uploadInst =upload.rende...

vue+jspdf+html2canvas导出PDF文件

    今天开始实现日结单这个功能,日结单是允许打印的,所以我们需要将日结单以PDF的形式导出,我做的是Vue单页应用,于是查找了一番Vue如何导出PDF,看了几篇博客,实现了PDF的导出。     不废话了,先看一下最终的打印结果        我丑话说在前面,最终打印出来的pdf文件就是这个样子,通过对jspdf的设置实现了pdf文件的分页,但文件的...

html5 canvas 前端生成缩略图

html5 canvas 前端生成缩略图 更新: 2013/08/01: 解决了后面遇到的bug: 图片被压扁(IOS6); 图片被旋转; 整个源码放在: https://github.com/kairyou/html5-make-thumb 新方案需要后面实现的, 就是下面的旧版本里的功能(水印/是否强制拉伸以适应目标尺寸等功能). w3ctech长沙站...

HTML5 Canvas 获取网页的像素值。

我之前在网上看过一个插件叫做出JScolor   颜色拾取器  说白了就是通过1*1PX的DOM设置颜色值通过JS来获取当前鼠标点击位置DOM的颜色值。 自从HTML5 画布出来之后。就有更好的方法来获取了,比方郭阿里巴巴ICON矢量库 用的SVG和渐变来进行绘制: 我昨天用Canvas来绘制了一下。由于Canvas有现成的方法getImageDat...