纯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 相关文章推荐
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
js document.write()使用介绍
Feb 21 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
Jun 17 Javascript
浅析Bootstrap组件之面板组件
May 04 Javascript
微信小程序 获取微信OpenId详解及实例代码
Oct 31 Javascript
使用javascript函数编写简单银行取钱存钱流程
May 26 Javascript
angularJs提交文本框数据到后台的方法
Oct 08 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
Dec 07 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
May 22 Javascript
Vue.js计算机属性computed和methods方法详解
Oct 12 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
Aug 21 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
php操作mysqli(示例代码)
2013/10/28 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
JS小框架 fly javascript framework
2009/11/26 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
关于vue组件事件属性穿透详解
2019/10/28 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
python基础教程之基本内置数据类型介绍
2014/02/20 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
python实现简单神经网络算法
2018/03/10 Python
python实现xml转json文件的示例代码
2020/12/30 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
大学生军训自我评价分享
2013/11/09 职场文书
规划编制实施方案
2014/03/15 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
redis 解决库存并发问题实现数量控制
2022/04/08 Redis