纯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 相关文章推荐
asp.net 30分钟掌握无刷新 Repeater
Sep 16 Javascript
如何实现textarea里的不同文本显示不同颜色
Jan 20 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
Sep 21 Javascript
JavaScript操作HTML DOM节点的基础教程
Mar 11 Javascript
JS中sort函数排序用法实例分析
Jun 16 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
JQuery实现文字无缝滚动效果示例代码(Marquee插件)
Mar 07 Javascript
Angular.js指令学习中一些重要属性的用法教程
May 24 Javascript
JavaScript中递归实现的方法及其区别
Sep 12 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 Javascript
vue 通过base64实现图片下载功能
Dec 19 Vue.js
使用vuex-persistedstate本地存储vuex
Apr 29 Vue.js
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
给多个地址发邮件的类
2006/10/09 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
python列表操作之extend和append的区别实例分析
2015/07/28 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
windows下python安装小白入门教程
2018/09/18 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
运动会广播稿60字
2014/01/15 职场文书
超市国庆节促销方案
2014/02/20 职场文书
工程管理英文求职信
2014/03/18 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
拉歌口号大全
2014/06/13 职场文书
霸气队列口号
2014/06/18 职场文书
升职自我推荐信范文
2015/03/25 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
mysql如何查询连续记录
2022/05/11 MySQL