用javascript实现画板的代码


Posted in Javascript onSeptember 05, 2007

在控制台中输入 
db.drawCircle([50,50],20,"black"); 
db.drawLine([5,5],[36,44],"red"); 
可以看到效果 

<body style="margin:0px;">  
</body>  
<script>  
    function DrawingBoard(width,height,size)  
    {  
        size=size||3  
        var container=document.createElement("div");  
        this.container=container;          container.runtimeStyle.width=(width)*size+"px";  
        container.runtimeStyle.height=(height)*size+"px";  
        container.runtimeStyle.margin="0px";  
        //container.style.border="solid 1px blue";  
        var count=0;  
                for(var y=0;y<height;y++)  
        {  
            for(var x=0;x<width;x++)  
            {  
                var curr=document.createElement("div");  
                curr.runtimeStyle.height=size+"px";  
                curr.runtimeStyle.width=size+"px";  
                curr.runtimeStyle.display="inline";  
                curr.runtimeStyle.overflow="hidden";  
                curr.style.backgroundColor="green";  
                curr.src="";  
                container.appendChild(curr);  
            }  
        }  
                //alert(curr.currentStyle.display);  
        //document.body.appendChild(container);  
        this.drawLine=function(start,end,color)  
        {  
            var dx=start[0]-end[0];  
            var dy=start[1]-end[1];  
            var x,y;  
            if( Math.abs(dx) > Math.abs(dy) )  
            {  
                for(var x=start[0];x!=end[0]+(end[0]-start[0])/Math.abs(end[0]-start[0]);x+=(end[0]-start[0])/Math.abs(end[0]-start[0]) )  
                {  
                    y=Math.round((x-start[0])/dx*dy+start[1]);  
                    this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                }  
            }  
            else  
            {  
                for(var y=start[1];y!=end[1]+(end[1]-start[1])/Math.abs(end[1]-start[1]);y+=(end[1]-start[1])/Math.abs(end[1]-start[1]) )  
                {  
                    x=Math.round((y-start[1])/dy*dx+start[0]);  
                    this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                }  
            }  
        }  
        this.drawCircle=function(m,R,color)  
        {  
            for(var r=0;r<=Math.floor(Math.sqrt(R*R-r*r));r++)  
            {  
                x=m[0]+r;y=m[1]+Math.floor(Math.sqrt(R*R-r*r));  
                this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                x=m[0]-r;y=m[1]+Math.floor(Math.sqrt(R*R-r*r));  
                this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                x=m[0]+r;y=m[1]-Math.floor(Math.sqrt(R*R-r*r));  
                this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                x=m[0]-r;y=m[1]-Math.floor(Math.sqrt(R*R-r*r));  
                this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                y=m[1]+r;x=m[0]+Math.floor(Math.sqrt(R*R-r*r));  
                this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                y=m[1]-r;x=m[0]+Math.floor(Math.sqrt(R*R-r*r));  
                this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                y=m[1]+r;x=m[0]-Math.floor(Math.sqrt(R*R-r*r));  
                this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
                y=m[1]-r;x=m[0]-Math.floor(Math.sqrt(R*R-r*r));  
                this.container.childNodes[this.trans([x,y])].style.backgroundColor=color;  
            }  

        }  
        this.appendto=function(parent)  
        {  
            parent.appendChild(this.container);  
        }  
        this.drawPoint=function(p,color)  
        {  
            this.container.childNodes[this.trans(p)].style.backgroundColor=color;  
        }  
        this.trans=function(p)  
        {  
            return p[0]+p[1]*width;  
        }  
        container=null;  
    }  
    function Console(width,height,command)  
    {  
        var container=document.createElement("div");  
        this.container=container;  
        container.runtimeStyle.width=(width);  
        container.runtimeStyle.height=(height);  
        container.runtimeStyle.margin="0px";  
        container.runtimeStyle.backgroundColor="black";  
        container.runtimeStyle.fontFamily="Terminal";  
        container.runtimeStyle.color="white";  
        container.runtimeStyle.fontSize="16px";  
        this.output=document.createElement("div");  
        container.appendChild(this.output);  
        container.innerHTML+="js>"  
        this.input=document.createElement("input");  
        container.appendChild(this.input);  
        this.input.runtimeStyle.backgroundColor="black";  
        this.input.runtimeStyle.borderWidth="0px";  
        this.input.runtimeStyle.color="white";  
        this.input.runtimeStyle.fontFamily="Terminal";  
        this.input.runtimeStyle.width="90%"  
        this.input.runtimeStyle.fontSize="16px"  
        this.input.runtimeStyle.position="relative";  
        this.input.runtimeStyle.top="2px";  
        command=command||function(str)  
        {  
            var e;  
            try{  
                var r=eval(str);  
            } catch(e) {  
                return "Bad command";  
            }  
            return r;  
        }  
        this.run=function(str)  
        {  
            this.input.parentNode.childNodes[0].innerHTML+=str+'<br/>'  
            this.input.parentNode.childNodes[0].innerHTML+=(command(str)+"<br/>")  
        }  
        this.input.command=function()  
        {  
            this.parentNode.childNodes[0].innerHTML+=this.value+'<br/>'  
            this.parentNode.childNodes[0].innerHTML+=(command(this.value)+"<br/>")  
        }  
        this.input.onkeyup=new Function("e","e=e||event;if(e.keyCode!=13)return;this.command();this.value='';");  
        this.appendto=function(parent)  
        {  
            parent.appendChild(this.container);  
        }  
        container=null;  
    }  
    var c=new Console("100%","50%");  
    c.appendto(document.body);  
    c.run("window.db=new DrawingBoard(100,100);document.body.appendChild(db.container);");  
</script>
Javascript 相关文章推荐
JavaScript表单常用验证集合
Jan 16 Javascript
javascript 日期常用的方法
Nov 11 Javascript
Javascript 入门基础学习
Mar 10 Javascript
JavaScript 实现鼠标拖动元素实例代码
Feb 24 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
Oct 28 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
Jan 18 Javascript
利用jQuery解析获取JSON数据
Apr 08 jQuery
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
引入JavaScript时alert弹出框显示中文乱码问题
Sep 16 Javascript
Angular2实现组件交互的方法分析
Dec 19 Javascript
浅谈JavaScript面向对象--继承
Mar 20 Javascript
Vue使用localStorage存储数据的方法
May 27 Javascript
js中的escape及unescape函数的php实现代码
Sep 04 #Javascript
一个符号插入器 中用到的js代码
Sep 04 #Javascript
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
Sep 04 #Javascript
一个用js实现控制台控件的代码
Sep 04 #Javascript
科讯商业版中用到的ajax空间与分页函数
Sep 02 #Javascript
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 #Javascript
给Javascript数组插入一条记录的代码
Aug 30 #Javascript
You might like
ie6 动态缩略图不显示的原因
2009/06/21 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
PHP count()函数讲解
2019/02/03 PHP
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
家长评语大全
2014/01/22 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
供用电专业求职信
2014/07/07 职场文书
学校党员对照检查材料
2014/08/28 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
继承权公证书范本
2015/01/23 职场文书
党员个人总结范文
2015/02/14 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python