javascript 之一个简单的画图demo

这是一个用javascript 在canvas 上实现的简单的画图应用,用支持html5 的浏览器可以看到如下效果:

功能很简单,原理其实和拖放是类似的,主要是三个事件:

1. 在canvas 上绑定mousedown 事件以标志绘画的开始(调用moveTo 移动画笔)

2. 在document 上绑定mousemove 事件来处理绘画时的行为(调用lineTo 以及stroke 进行绘画)

3. 在document 上绑定mouseup 事件以标志绘画的结束(解绑document 上的两个事件)

实现时需特别注意的一点是调用moveTo 以及lineTo 方法时如何传递正确的坐标值,这个坐标值应该是光标相对于canvas 左上角的偏移量,获取时需要把canvas 相对于当前视口的位置考虑进去,getBoundingClientRect 方法则正好派上了用场(支持HTML5 的浏览器应该都实现了这个方法),最后用event 对象的clientX, clientY 减去getBoundingClientRect 方法返回的left, top 值即可。

就这样一个简单的鼠绘功能就完成了,不足之处也有,比如不能够画点。。。 我个人觉得用canvas 来做画图还是比较弱的,复杂一些的功能就不太好实现了,不过大家也可以尝试下哦,比如要添加个保存图片的方法,定义Draw.prototype.save = function() {...},其中可调用toDataURL 方法实现。

这里有个不错的HTML5 canvas 教程可供初学者学习~

最后附上源码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>draw demo</title>
</head>
<body>

<canvas id="the_stage" width="600" height="400" style="border:1px solid #999;">您的浏览器不支持canvas!</canvas>

<script>
function Draw(arg) {
    if (arg.nodeType) {
        this.canvas = arg;
    } else if (typeof arg == 'string') {
        this.canvas = document.getElementById(arg);
    } else {
        return;
    }
    this.init();
}
Draw.prototype = {
    init: function() {
        var that = this;
        if (!this.canvas.getContext) {
            return;
        }
        this.context = this.canvas.getContext('2d');
        this.canvas.onselectstart = function () {
            return false;  //修复chrome下光标样式的问题
        };
        this.canvas.onmousedown = function(event) {
            that.drawBegin(event);
        };
    },
    drawBegin: function(e) {
        var that = this,
            stage_info = this.canvas.getBoundingClientRect();
        window.getSelection ? window.getSelection().removeAllRanges() :
                                document.selection.empty();  //清除文本的选中
        this.context.moveTo(
            e.clientX - stage_info.left,
            e.clientY - stage_info.top
        );
        document.onmousemove = function(event) {
            that.drawing(event);
        };
        document.onmouseup = this.drawEnd;
    },
    drawing: function(e) {
        var stage_info = this.canvas.getBoundingClientRect();
        this.context.lineTo(
            e.clientX - stage_info.left,
            e.clientY - stage_info.top
        );
        this.context.stroke();
    },
    drawEnd: function() {
        document.onmousemove = document.onmouseup = null;
    }
};
var draw = new Draw('the_stage');
</script>
</body>
</html>

原文链接: http://www.cnblogs.com/eric6/archive/2011/07/26/2116893.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好,我是 C 知道,我可以回答你的问题。关于用 JavaScript一个简单的网页,我可以给你一些指导。 首先,你需要了解 HTML 和 CSS 的基础知识,因为 JavaScript 主要是用来操作网页中的元素和事件的。你可以在 HTML 中添加一个按钮,然后用 JavaScript 给它添加一个点击事件,当用户点击按钮时,就会触发相应的操作。 下面是一个简单的示例代码: HTML: ``` <!DOCTYPE html> <html> <head> <title>JavaScript 网页示例</title> </head> <body> <button id="myButton">点击我</button> <p id="myText"></p> <script src="script.js"></script> </body> </html> ``` CSS: ``` button { font-size: 16px; padding: 10px 20px; background-color: #007bff; color: #fff; border: none; border-radius: 5px; cursor: pointer; } button:hover { background-color: #0062cc; } ``` JavaScript: ``` var myButton = document.getElementById("myButton"); var myText = document.getElementById("myText"); myButton.addEventListener("click", function() { myText.innerHTML = "你点击了按钮!"; }); ``` 这个示例代码中,我们在 HTML 中添加了一个按钮和一个段落元素,然后在 JavaScript 中获取了这两个元素,并给按钮添加了一个点击事件。当用户点击按钮时,就会在段落元素中显示一段文本。 当然,这只是一个简单的示例,你可以根据自己的需求和技能水平来编写更复杂的 JavaScript 网页。希望这个回答能够帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值