canvas记录

Html5那么热,使用了也这么久了,最近在JQuery库上看了很多前端搞的效果,那叫一个炫啊,昨天下载了几十套源码,无奈水平不够,看不懂,今天就先从canvas入手深入下去。

写了一个canvas v0.0.01版,能用的有:看截图吧
这里写图片描述

下面就看代码吧,都很简单、基础

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
        canvas {
            border: 1px dashed gray;
        }
    </style>
</head>
<body>
    <div>
        <button onclick="clear2()">擦除</button>
        <button onclick="drawLinearGradient()">绘制线性</button>
        <button onclick="drawRectangle()">绘制矩形 - 填充颜色</button>
        <button onclick="drawRect()">绘制矩形-不填充颜色</button>
        <button onclick="drawArc()"></button>
    </div>
    <canvas width="400 " height="400" id="canvas"></canvas>
    <script type="text/javascript">
        //获取canvas结点
        var canvas = document.getElementById('canvas');
        //渲染2d
        var canvas2d = canvas.getContext('2d');
        (function () {
            drawLinearGradient();
        })();
        //绘制线性
        function drawLinearGradient() {

            //第一个起点
            canvas2d.moveTo(10, 10);
            //第二个起点
            canvas2d.lineTo(100, 200);
            //第三个点(以第二个点为起点)
            canvas2d.lineTo(10, 300);
            //添加渐变
            var addJB = canvas2d.createLinearGradient(0, 0, 300, 300);
            addJB.addColorStop(0, 'red');
            addJB.addColorStop(1, 'yellow');
            canvas2d.lineWidth = 1;
            //绘制样式
            canvas2d.strokeStyle = addJB;//也可以用 red;blue,00ff00等
            //绘制路径
            canvas2d.stroke();
        }

        //绘制矩形-填充颜色
        function drawRectangle() {
            var addJB = canvas2d.createLinearGradient(0, 0, 300, 300);
            addJB.addColorStop(0, 'red');
            addJB.addColorStop(1, 'yellow');
            canvas2d.fillStyle = addJB;//'red';
            canvas2d.fillRect(30, 30, 200, 200);
        }
        //绘制矩形-不填充颜色
        function drawRect() {

            canvas2d.strokeStyle = '#aaffaa';
            canvas2d.strokeRect(50, 50, 100, 100);
        }
        //绘制一个圆
        function drawArc() {
            canvas2d.beginPath();
            canvas2d.arc(150, 150, 100, 100, Math.PI, false);
            canvas2d.closePath();
            canvas2d.stroke();
        }

        //擦除 -只有在onload有效
        function clear() {
            canvas2d.clearRect(10, 10, 200, 200);
        }
        //擦除2
        function clear2() {
            canvas2d.fillStyle = 'white';
            canvas2d.fillRect(0, 0, canvas.width, canvas.height);
        }
    </script>
</body>
</html>

canvas v0.0.02版实现效果

这里写图片描述
描述:里面的圆自上而下移动,相当于雪花的飘动效果,半径,圆个数,颜色,透明度等项可随机改变。

贴代码,记录咱的第一次,哈哈,也希望能对你有帮助

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
        canvas {
            border: 1px dashed gray;
        }
    </style>
</head>
<body>
    <div>
    </div>
    <canvas width="400 " height="400" id="canvas"></canvas>
    <script type="text/javascript">
        (function () {
            //获取canvas结点
            var canvas = document.getElementById('canvas');
            //渲染2d
            var canvas2d = canvas.getContext('2d');
            //填充背景色
            var clear = function () {
                canvas2d.fillStyle = "#d0e7f9";
                canvas2d.fillRect(0, 0, canvas.width, canvas.height);
                canvas2d.fill();
            }
            //定义圆圈数组和个数
            var circleNum = 20, circles = [];
            //生成圆基本参数
            for (var i = 0; i < circleNum; i++) {
                //圆的位置x,y ,radius,alpha
                circles.push([Math.random() * canvas.width, Math.random() * canvas.height, Math.random() * 60, Math.random() / 2]);
            }
            //绘制
            var DrawCircles = function () {
                for (var i = 0; i < circleNum; i++) {
                    canvas2d.fillStyle = 'rgba(200,200,200,' + circles[i][3] + ')';
                    canvas2d.beginPath();
                    canvas2d.arc(circles[i][0], circles[i][1], circles[i][2], Math.PI * 2, false);
                    canvas2d.closePath();
                    canvas2d.fill();
                }

            }
            //移动算法|重设圆的参数
            var movecilcles = function (cloud) {
                for (var i = 0; i < circleNum; i++) {//超出屏幕
                    if (circles[i][1] - circles[i][2] > canvas.height) {
                        circles[i][2] = Math.random() * 60;//半径随机
                        circles[i][1] = 0 - circles[i][2];
                        circles[i][3] = Math.random() / 2;
                    } else//该圆正在屏幕中
                    {
                        circles[i][0] += Number.parseInt(Math.random() * 3)*(Math.random()*2>1?-1:1);
                        circles[i][1] += cloud;
                    }
                }
            }
            //运行
            var run = function () {
                clear();
                movecilcles(3);
                DrawCircles();
            };
            setInterval(run, 30);
        })();

    </script>
</body>
</html>
rrweb可以通过以下步骤记录canvas: 1. 在页面中引入rrweb库。 2. 对canvas进行事件监听,例如鼠标点击、移动等事件。 3. 在监听到事件时,使用rrweb提供的API记录事件信息。 4. 当需要回放记录canvas时,使用rrweb提供的回放功能,将记录的事件逐一播放。 以下是一个基本的示例代码: ```javascript import { addCustomEvent } from 'rrweb'; const canvas = document.querySelector('canvas'); let isRecording = false; let events = []; function startRecording() { isRecording = true; addCustomEvent(canvas, 'mousedown', (e) => { events.push({ type: 'mousedown', timestamp: Date.now(), x: e.clientX, y: e.clientY, }); }); addCustomEvent(canvas, 'mousemove', (e) => { events.push({ type: 'mousemove', timestamp: Date.now(), x: e.clientX, y: e.clientY, }); }); } function stopRecording() { isRecording = false; } function playRecording() { let i = 0; const intervalId = setInterval(() => { const event = events[i]; if (event) { const { type, x, y } = event; switch (type) { case 'mousedown': // 在canvas上模拟鼠标点击事件 break; case 'mousemove': // 在canvas上模拟鼠标移动事件 break; default: break; } i++; } else { clearInterval(intervalId); } }, 10); } ``` 在该示例中,我们使用addCustomEvent函数为canvas添加了mousedown和mousemove事件的监听器,并在监听到事件时记录了事件的类型、时间戳、鼠标位置等信息。当需要回放记录时,我们遍历记录的事件数组,并模拟对应的鼠标事件。需要注意的是,由于canvas的绘制是依靠JavaScript代码实现的,因此需要根据具体的业务逻辑进行模拟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值