纯JS画点、画线、画圆的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
div{ overflow:hidden;}
</style>
<script type="text/javascript">
/* 珠峰培训 2011年12月9日课堂示例
以下画点,画线,画圆的方法,都不是用HTML5的canvas,而是用的纯js
用到了一些数学的三角函数方法
以下代码是课堂随机写出,没有做更多优化
*/
function point(x,y){//画点
var oDiv=document.createElement('div');
oDiv.style.position='absolute';
oDiv.style.height='2px';
oDiv.style.width='2px';
oDiv.style.backgroundColor='red';
oDiv.style.left=x+'px';
oDiv.style.top=y+'px';
//document.body.appendChild(oDiv);
return oDiv;//注意:返回的值是一个dom节点,但并未追加到文档中
}
function drawLine(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(point(width+x1,i+y1));
- }
- }
- if(y<0){//有时候是倒着画线的
- for(var i=0;i>y;i--){
- var width=x/y*i
- {
- frag.appendChild( point(width+x1,i+y1));
- }
- }
- }
- }//end if
- else {
- if(x>0)//正着画线是这样的
- for(var i=0;i<x;i++){
- var height=y/x*i
- {
- frag.appendChild(point(i+x1,height+y1));
- }
- }
- if(x<0){//有时候是倒着画线的
- for(var i=0;i>x;i--){
- var height=y/x*i
- {
- frag.appendChild( point(i+x1,height+y1));
- }
- }
- }//end if
- }
- //document.body.appendChild(frag);
- document.getElementById('div1').appendChild(frag);
- //var oDiv=document.createElement('div')
- //oDiv.appendChild(frag);
- //document.body.appendChild(oDiv);
- }
- function drawCircle(){//画个圆
- var r=200;
- var x1=300;
- var y1=300;
- var frag=document.createDocumentFragment();
- for(var degree=0;degree<360;degree+=2){
- var x2=r*Math.sin(degree*Math.PI/180);
- var y2=r*Math.cos(degree*Math.PI/180);
- frag.appendChild(point(x1+x2,y1+y2));
- }
- document.body.appendChild(frag);
- }
- function dragCircle(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(point(x1+x2,y1+y2));
- }
- document.getElementById('div1').appendChild(frag);
- }
- window.onload=function(){
- drawCircle()
- drawLine(500,30,0,30);
- drawLine(300,20,300,500);
- drawLine(50,20,700,500);
- var x1=0;
- var y1=0;
- //以下是处理拖拽 拖拽的时候,出现一条直线和一个圆
- //注意:由于这些操作都是由DOM来完成的,所以性能开销比较大,尤其是在IE里,明显的会卡一些。
- function down(e){
- var e=e||window.event;
- x1=e.clientX;
- y1=e.clientY;
- document.onmousemove=move;
- document.onmouseup=up;
- }
- function move(e){
- document.getElementById('div1').innerHTML='';
- var e=e||window.event;
- var x2=e.clientX;
- var y2=e.clientY;
- drawLine(x1,y1,x2,y2);//用这个方法就可以在浏览器上拖出一条直线来
- dragCircle(x1,y1,x2,y2);//用这个方法就可以在浏览器上拖出一个圆来
- }
- function up(){
- document.onmousemove=null;
- document.onmouseup=null;
- }
- document.onmousedown=down;
- }
- </script>
- </head>
- <body>
- <div id="div1">在浏览器上拖动鼠标试试</div>
- </body>
- </html>
纯JS画点、画线、画圆的方法的更多相关文章
- javascript画直线和画圆的方法(非HTML5的方法)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HTML5画:线、圆、矩形、渐变
示例一:矩形 <!DOCTYPE html><head> <meta charset=utf-8> <title>HTML5画线.圆.矩形</ti ...
- 【液晶模块系列基础视频】4.1.X-GUI图形界面库-画线画圆等函数简介
[液晶模块系列基础视频]4.1.X-GUI图形界面库-画线画圆等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地 ...
- WPF在圆上画出刻度线
思路 我们可以使用Ellipse先画出一个圆当背景,然后用Canvas再叠加画上刻度线,就能得到如下的效果 我们先用Ellipse画一个橙色的圆,然后将Canvas的宽度和高度绑定到Ellipse的宽 ...
- IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
... 首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Con ...
- (转) IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...
- [置顶] IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)
首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...
- ArcGIS API for Flex实现GraphicsLayer上画点、线、面。
目的: ArcGIS API for Flex实现GraphicsLayer上画点.线.面. 准备工作: 1.这次地图数据就用Esri提供的http://server.arcgisonline.com ...
- unity3d NavMeshAgent 寻路画线/画路径
今天在群里看见有个小伙在问Game视图寻路时怎么画线 正好前几天写了个寻路,而且自己也不知道具体怎么在寻路时画线,所以决定帮帮他,自己也好学习一下 在百度查了一下资料,直接搜寻路画路径.寻路画线... ...
随机推荐
- 关于使用Transaction对于非数据库事务的操作
在操作数据库的过程中,为了数据的一致性,我们可以使用Transaction,要么成功的时候全部提交,要么有任何一个操作失败立即全部回滚.不仅仅是在数据库方面,有时候操作其他的内容,比如说对于系统文件的 ...
- Javascript(JS)对Cookie的读取、删除、写入操作帮助方法
var CookieUtils = { get: function (name) { var cookieName = encodeURIComponent(name) + '=', cookieSt ...
- 【转】Android 防破解技术简介
http://www.cnblogs.com/likeandroid/p/4888808.html Android 防破解技术简介 这几年随着互联网的不断发展,Android App 也越来越多!但是 ...
- 点击次数(thinkphp)
protected function addHit($tbName, $id) { //定义变量:作为一个查询条件 $where = array( 'deleted' => 0, 'hidden ...
- 谷歌技术"三宝"之MapReduce
江湖传说永流传:谷歌技术有"三宝",GFS.MapReduce和大表(BigTable)! 谷歌在03到06年间连续发表了三篇非常有影响力的文章,各自是03年SOSP的GFS,04 ...
- FreeMarker中文API手冊(完整)
FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用 ...
- android之多媒体篇(一)
Android 4.0.3(Api Level 15)支持的多媒体格式. 注意:有些设备可能支持其他的文件格式. 1.Audio AAC LC/LTP.HE-AACv1(AAC+).AMR-NB.AM ...
- PHP定时执行任务的实现(转)
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行. set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去 $int ...
- Android下用Properties保存程序配置
读写函数分别例如以下: import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Proper ...
- CSS3实现自定义Checkbox和Radiobox
我们知道浏览器自带的Checkbox复选框不怎么美观(这或许是我们看习惯了的缘故),而且复选框在不同的浏览器上显示的样式又有很大的差异,由于目前越来越多的人开始接受支持CSS3的现代浏览器,所以今天就 ...