纯js网页画板(Graphics)类简介及实现代码


Posted in Javascript onDecember 24, 2012

今天需要在网页上画一个图谱,想到用JS,经过学习,和网上搜索,经过整理优化得到下面代码,注意不是用HTML5的canvas,而是用的纯js

/* 以下画点,画线,画圆的方法,都不是用HTML5的canvas,而是用的纯js 
用到了一些数学的三角函数方法 
以下代码是课堂随机写出,没有做更多优化 
*/ 
/* 
面向对象封装,添加绘制矩形 
进一步优化代码 
*/ 
var Graphics = function(divId, color){ 
this.divId = divId; 
this.color = color; //'#000000'或'black' 
this.drawPoint= function(x,y){ 
//画点 
var oDiv=document.createElement('div'); 
oDiv.style.position='absolute'; 
oDiv.style.height='2px'; 
oDiv.style.width='2px'; 
oDiv.style.backgroundColor=this.color; 
oDiv.style.left=x+'px'; 
oDiv.style.top=y+'px'; 
//document.body.appendChild(oDiv); 
return oDiv;//注意:返回的值是一个dom节点,但并未追加到文档中 
}; 
this.drawLine = function(x1,y1,x2,y2){ 
//画一条线段的方法。(x1,y1),(x2,y2)分别是线段的起点终点 
var x=x2-x1;//宽 
var y=y2-y1;//高 
var frag=document.createDocumentFragment(); 
if(Math.abs(y)>Math.abs(x)){//那个边更长,用那边来做画点的依据(就是下面那个循环),如果不这样,当是一条垂直线或水平线的时候,会画不出来 
if(y>0)//正着画线是这样的 
for(var i=0;i<y;i++){ 
var width=x/y*i //x/y是直角两个边长的比,根据这个比例,求出新坐标的位置 
{ frag.appendChild(drawPoint(width+x1,i+y1)); 
} 
} 
if(y<0){//有时候是倒着画线的 
for(var i=0;i>y;i--){ 
var width=x/y*i 
{ 
frag.appendChild(drawPoint(width+x1,i+y1)); 
} 
} 
} 
}//end if 
else { 
if(x>0)//正着画线是这样的 
for(var i=0;i<x;i++){ 
var height=y/x*i 
{ 
frag.appendChild(drawPoint(i+x1,height+y1)); 
} 
} 
if(x<0){//有时候是倒着画线的 
for(var i=0;i>x;i--){ 
var height=y/x*i 
{ 
frag.appendChild(this.drawPoint(i+x1,height+y1)); 
} 
} 
}//end if 
} 
document.getElementById(this.divId).appendChild(frag); 
}; 
this.drawCircle = function(r, x, y){ 
//画个圆。x,原点横坐标;y,原点纵坐标;r,半径 
var frag=document.createDocumentFragment(); 
for(var degree=0;degree<360;degree+=2){ 
var x1=r*Math.sin(degree*Math.PI/180); 
var y1=r*Math.cos(degree*Math.PI/180); 
frag.appendChild(drawPoint(x+x1,y+y1)); 
} 
document.body.appendChild(frag); 
}; 
this.dragCircle = function(x1,y1,x2,y2){ 
//拖出一个圆来 
var r=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));//求出半径的长 直角三角形中 斜边的平方=两个直边的平方之和 
var frag=document.createDocumentFragment(); 
for(var degree=0;degree<360;degree+=2){//每隔2度画一个点 
var x2=r*Math.sin(degree*Math.PI/180); 
var y2=r*Math.cos(degree*Math.PI/180); 
frag.appendChild(drawPoint(x1+x2,y1+y2)); 
} 
document.getElementById(this.divId).appendChild(frag); 
}; 
this.drawRect = function(startX, startY, lengthX, lengthY, newId, text){ 
//(startX, startY)起点坐标,lengthX,长 lengthY,宽 newId,新创建的div的Id text,div内容 
var myDiv=document.createElement('div'); 
if(newId){ 
myDiv.id=newId; 
} 
myDiv.style.width= lengthX + 'px'; 
myDiv.style.height= lengthY + 'px'; 
myDiv.style.backgroundColor = this.color; 
myDiv.style.left=startX + 'px'; 
myDiv.style.top=startY + 'px'; 
myDiv.style.textAlign= 'center'; 
if(text){ 
myDiv.innerHTML = text; 
} 
document.getElementById(this.divId).appendChild(myDiv); 
}; 
}; 
window.onload=function(){ 
var g = new Graphics('div1', 'red'); 
g.drawLine(500,30,0,30); 
g.color = '#CDC9C9'; 
g.drawRect(10,10,200,200, '', '测试'); 
}
Javascript 相关文章推荐
xml和web特殊字符
Apr 28 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
Jun 20 Javascript
用jquery模仿的a的title属性(兼容ie6/7)
Jan 21 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 Javascript
基于jQuery实现动态搜索显示功能
May 05 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
Dec 26 Javascript
微信小程序教程系列之视图层的条件渲染(10)
Apr 19 Javascript
如何在vue中使用ts的示例代码
Feb 28 Javascript
JS逻辑运算符短路操作实例分析
Jul 09 Javascript
小程序实现抽奖动画
Apr 16 Javascript
Knockoutjs快速入门(经典)
Dec 24 #Javascript
Underscore.js 的模板功能介绍与应用
Dec 24 #Javascript
javascript 星级评分效果(手写)
Dec 24 #Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 #Javascript
jquery限制输入字数,并提示剩余字数实现代码
Dec 24 #Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
Dec 23 #Javascript
ajax中get和post的说明及使用与区别
Dec 23 #Javascript
You might like
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
jQuery 使用个人心得
2009/02/26 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
JS提交form表单实例分析
2015/12/10 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
Python代码的打包与发布详解
2014/07/30 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
python conda操作方法
2019/09/11 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
Python绘制数码晶体管日期
2021/02/19 Python
日本无添加化妆品:HABA
2016/08/18 全球购物
英语翻译系毕业生求职信
2013/09/29 职场文书
小学门卫岗位职责
2013/12/17 职场文书
市政施工员自我鉴定
2014/01/15 职场文书
成龙洗发水广告词
2014/03/14 职场文书
酒店节能减排方案
2014/05/26 职场文书
疾病防治方案
2014/05/31 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
天气温馨提示语
2015/07/14 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL