纯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 相关文章推荐
js url传值中文乱码之解决之道
Nov 20 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
微信小程序实现根据字母选择城市功能
Aug 16 Javascript
微信小程序wepy框架笔记小结
Aug 08 Javascript
Vue.js获取被选择的option的value和text值方法
Aug 24 Javascript
使用jquery Ajax实现上传附件功能
Oct 23 jQuery
微信小程序实现授权登录
May 15 Javascript
基于iview的router常用控制方式
May 30 Javascript
node实现mock-plugin中间件的方法
Dec 25 Javascript
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
JS实现百度搜索框
Feb 25 Javascript
JS高级程序设计之class继承重点详解
Jul 07 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
GD输出汉字的函数的分析
2006/10/09 PHP
新浪SAE搭建PHP项目教程
2015/01/28 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
jquery判断元素是否隐藏的多种方法
2014/05/06 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
实现两个文本框同时输入的实例
2017/09/25 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
python实现朴素贝叶斯分类器
2018/03/28 Python
python微信公众号之关注公众号自动回复
2018/10/25 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
python 绘制场景热力图的示例
2020/09/23 Python
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
教育科学研究生自荐信
2013/10/09 职场文书
高中体育教学反思
2014/01/24 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
党性分析自查总结
2014/10/14 职场文书
出国签证在职证明范本
2014/11/24 职场文书
布达拉宫的导游词
2015/02/02 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
安全教育的主题班会
2015/08/13 职场文书