纯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 相关文章推荐
利用404错误页面实现UrlRewrite的实现代码
Aug 20 Javascript
Javascript无阻塞加载具体方式
Jun 28 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
Dec 10 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 20 Javascript
Bootstrap每天必学之缩略图与警示窗
Nov 29 Javascript
在AngularJS框架中处理数据建模的方式解析
Mar 05 Javascript
老司机带你解读jQuery插件开发流程
May 16 Javascript
微信小程序实现倒计时60s获取验证码
Apr 17 Javascript
对类Vue的MVVM前端库的实现代码
Sep 07 Javascript
angular4强制刷新视图的方法
Oct 09 Javascript
js 实现ajax发送步骤过程详解
Jul 25 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
Aug 15 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
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
PHP实现多条件查询实例代码
2010/07/17 PHP
PHP 八种基本的数据类型小结
2011/06/01 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
js Map List 遍历使用示例
2013/07/10 Javascript
jQuery jcrop插件截图使用方法
2013/11/20 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
Django发送html邮件的方法
2015/05/26 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
AJAX应用和传统Web应用有什么不同
2013/08/24 面试题
后勤采购员岗位职责
2013/12/19 职场文书
单位消防安全制度
2014/01/12 职场文书
关于赌博的检讨书
2014/01/24 职场文书
优秀教师获奖感言
2014/01/31 职场文书
期终自我鉴定
2014/02/17 职场文书
大一新生检讨书
2014/10/29 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
先进工作者事迹材料
2014/12/23 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android