如何在没有Jquery的情况下在AngularJS或纯JavaScript中创建签名板?

佐恩

我正在制作一个移动应用程序,我需要最简单的JavaScript签名板才能使用AngularJS进行实现,但我在任何地方都找不到任何资源。

所有的插件都使用jquery,我拒绝加载它,因为它是一个移动应用程序,而jquery只会使该应用程序肿。有谁知道我可以使用的教程,或者可以给我基本的指导,我该怎么做,我需要什么元素...我真的很喜欢!

更新:我只是写了一些基本的东西,因为这里已经回答了。但这是行不通的。谁能确定原因?我有一个指令,我将其作为元素()注入到html中。控制台不返回任何异常。

sig.directive("signatureDirective", function () {
    return {
        template: '<canvas id="canvas" width="500" height="100" style="border: 1px solid #ccc;"></canvas>',
        restrict: 'E',
        link: function (scope, element, attrs) {

            var canvas = $(element);  
            var context = canvas.getContext("2d");           
            var clickX = new Array();
            var clickY = new Array();
            var clickDrag = new Array();
            var paint;

            $(element).addEventListener("mousedown", mouseDown, false);

            $(element).addEventListener("mousemove", mouseXY, false);

            document.body.addEventListener("mouseup", mouseUp, false);

            $(element).addEventListener("touchstart", mouseDown, false);

            $(element).addEventListener("touchmove", mouseXY, true);

            $(element).addEventListener("touchend", mouseUp, false);

            document.body.addEventListener("touchcancel", mouseUp, false);

            function draw() {
                context.clearRect(0, 0, 500, 100); 

                context.strokeStyle = "#000000";  
                context.lineJoin = "miter";       
                context.lineWidth = 2;            

                for (var i = 0; i < clickX.length; i++) {
                    context.beginPath();                               
                    if (clickDrag[i] && i) {
                        context.moveTo(clickX[i - 1], clickY[i - 1]);  
                    } else {
                        context.moveTo(clickX[i] - 1, clickY[i]);      
                    }
                    context.lineTo(clickX[i], clickY[i]);              
                    context.stroke();                                  
                    context.closePath();                               
                }
            }

            function mouseDown(e) {
                var mouseX = e.pageX - this.offsetLeft;
                var mouseY = e.pageY - this.offsetTop;

                paint = true;
                addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop);
                draw();
            }

            function mouseUp() {
                paint = false;
            }

            function mouseXY(e) {
                if (paint) {
                    addClick(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true);
                    draw();
                }
            }

        }
    };
});
丹·普林斯|

看一下canvas元素。您可以直接使用画布操作像素数据并绘制原始形状,并且作为HTML元素,它支持开箱即用所需的所有鼠标操作事件。

<canvas id='signature' width='300' height='50'></canvas>

像这样的东西:

var canvas, context;
var pen = {};
canvas = document.getElementById('signature');
context = canvas.getContext('2d');

canvas.addEventListener('mousemove', function(e) {
  pen.x = e.pageX;
  pen.y = e.pageY;
});

canvas.addEventListener('mousedown', function(e) {
  context.fillRect(pen.x, pen.y, 1, 1);
});

// when you're done, you can get a base 64 encoded png version
// of the image data.

context.getImageData();

这是一种非常原始的方法,使用fillRect方法来模拟像素。如果您想查看更重的解决方案,则可以尝试使用点击点和贝塞尔曲线进行操作。

如果您使用的是Angular,那么您几乎肯定会希望也将其包装在指令中。


编辑

首先,您正在使用jQuery和普通js的奇怪组合。看起来像这样的所有行都将不起作用。

$(element).addEventListener("mousedown", mouseDown, false);

应该看起来像这样:

$(element).on("mousedown", mouseDown, false);

接下来,您似乎正在调用一个addClick实际上并不存在的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在没有其他库/框架的情况下在纯JavaScript中重现jQuery的.width()行为

如何在没有jQuery的情况下在Javascript中添加和删除类

如何在没有javascript的情况下在rails(最后通牒)中创建倒计时

如何在没有用于构建仪表板的模型的情况下在 cakephp 3 中创建页面/视图?

如何在没有滚动条的情况下在 Tailwind 中创建可滚动元素

如何在没有关联的UI元素的情况下在iOS中创建序列

如何在没有可用数组的情况下在React中创建多个元素?

如何在没有Apple Developer帐户的情况下在xcode 6中创建ipa?

如何在没有验证规则的情况下在Yii2中创建方案?

如何在没有系统权限的情况下在 oracle 中创建别名

如何在没有数学库的情况下在 C++ 中创建复利公式?

如何在没有循环的情况下在foreach CI中创建多数组

如何在没有onclick属性帮助的情况下在jQuery函数中传递值?

我如何在没有Animate事件的情况下在Jquery中滚动?

没有JQuery的情况下,如何在JavaScript中创建cookie?

如何在没有document.write的情况下在HTML页面中显示JavaScript变量

如何在没有Array.prototype.reverse的情况下在JavaScript中反转数组?

我们如何在没有任何JavaScript的情况下在QML中声明枚举?

如何在没有axios的情况下在普通JavaScript中设置令牌的全局标头

如何在没有得到CryptographicException的情况下在Azure WebJob上签名JWT令牌?

如何在不使用jquery的情况下在纯JavaScript中使用对象的函数?

如何在没有人工干预的情况下在angularJS中重新加载“ index.html”?

如何在没有Gradle或Maven的情况下在Intellij 2020.2中创建新的Java EE项目?

如何在没有Nuxeo Studio的情况下在Nuxeo中创建自定义文档类型

如何在没有Storyboard的情况下在Xcode中创建一个空应用程序

如何在没有numpy的情况下在字典中创建一个交替值数组?

如何在没有额外键的情况下在循环中创建数组对象?

在没有jQuery的情况下在AngularJS中扩展DOM对象的推荐方法?

如何在没有外部环境帮助的情况下在javascript闭包中传递参数并保持内存?