<!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)//正着画线是这样的

    1. for(var i=0;i<y;i++){
    2. var width=x/y*i  //x/y是直角两个边长的比,根据这个比例,求出新坐标的位置
    3. {
    4. frag.appendChild(point(width+x1,i+y1));
    5. }
    6. }
    7. if(y<0){//有时候是倒着画线的
    8. for(var i=0;i>y;i--){
    9. var width=x/y*i
    10. {
    11. frag.appendChild(   point(width+x1,i+y1));
    12. }
    13. }
    14. }
    15. }//end if
    16. else {
    17. if(x>0)//正着画线是这样的
    18. for(var i=0;i<x;i++){
    19. var height=y/x*i
    20. {
    21. frag.appendChild(point(i+x1,height+y1));
    22. }
    23. }
    24. if(x<0){//有时候是倒着画线的
    25. for(var i=0;i>x;i--){
    26. var height=y/x*i
    27. {
    28. frag.appendChild(   point(i+x1,height+y1));
    29. }
    30. }
    31. }//end if
    32. }
    33. //document.body.appendChild(frag);
    34. document.getElementById('div1').appendChild(frag);
    35. //var oDiv=document.createElement('div')
    36. //oDiv.appendChild(frag);
    37. //document.body.appendChild(oDiv);
    38. }
    39. function drawCircle(){//画个圆
    40. var r=200;
    41. var x1=300;
    42. var y1=300;
    43. var frag=document.createDocumentFragment();
    44. for(var degree=0;degree<360;degree+=2){
    45. var x2=r*Math.sin(degree*Math.PI/180);
    46. var y2=r*Math.cos(degree*Math.PI/180);
    47. frag.appendChild(point(x1+x2,y1+y2));
    48. }
    49. document.body.appendChild(frag);
    50. }
    51. function dragCircle(x1,y1,x2,y2){//拖出一个圆来
    52. var r=Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));//求出半径的长 直角三角形中 斜边的平方=两个直边的平方之和
    53. var frag=document.createDocumentFragment();
    54. for(var degree=0;degree<360;degree+=2){//每隔2度画一个点
    55. var x2=r*Math.sin(degree*Math.PI/180);
    56. var y2=r*Math.cos(degree*Math.PI/180);
    57. frag.appendChild(point(x1+x2,y1+y2));
    58. }
    59. document.getElementById('div1').appendChild(frag);
    60. }
    61. window.onload=function(){
    62. drawCircle()
    63. drawLine(500,30,0,30);
    64. drawLine(300,20,300,500);
    65. drawLine(50,20,700,500);
    66. var x1=0;
    67. var y1=0;
    68. //以下是处理拖拽 拖拽的时候,出现一条直线和一个圆
    69. //注意:由于这些操作都是由DOM来完成的,所以性能开销比较大,尤其是在IE里,明显的会卡一些。
    70. function down(e){
    71. var e=e||window.event;
    72. x1=e.clientX;
    73. y1=e.clientY;
    74. document.onmousemove=move;
    75. document.onmouseup=up;
    76. }
    77. function move(e){
    78. document.getElementById('div1').innerHTML='';
    79. var e=e||window.event;
    80. var x2=e.clientX;
    81. var y2=e.clientY;
    82. drawLine(x1,y1,x2,y2);//用这个方法就可以在浏览器上拖出一条直线来
    83. dragCircle(x1,y1,x2,y2);//用这个方法就可以在浏览器上拖出一个圆来
    84. }
    85. function up(){
    86. document.onmousemove=null;
    87. document.onmouseup=null;
    88. }
    89. document.onmousedown=down;
    90. }
    91. </script>
    92. </head>
    93. <body>
    94. <div id="div1">在浏览器上拖动鼠标试试</div>
    95. </body>
    96. </html>
    97. 更多内容请点击

纯JS画点、画线、画圆的方法的更多相关文章

  1. javascript画直线和画圆的方法(非HTML5的方法)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. HTML5画:线、圆、矩形、渐变

    示例一:矩形 <!DOCTYPE html><head> <meta charset=utf-8> <title>HTML5画线.圆.矩形</ti ...

  3. 【液晶模块系列基础视频】4.1.X-GUI图形界面库-画线画圆等函数简介

    [液晶模块系列基础视频]4.1.X-GUI图形界面库-画线画圆等函数简介 ============================== 技术论坛:http://www.eeschool.org 博客地 ...

  4. WPF在圆上画出刻度线

    思路 我们可以使用Ellipse先画出一个圆当背景,然后用Canvas再叠加画上刻度线,就能得到如下的效果 我们先用Ellipse画一个橙色的圆,然后将Canvas的宽度和高度绑定到Ellipse的宽 ...

  5. IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

    ... 首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Con ...

  6. (转) IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

    首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...

  7. [置顶] IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

    首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...

  8. ArcGIS API for Flex实现GraphicsLayer上画点、线、面。

    目的: ArcGIS API for Flex实现GraphicsLayer上画点.线.面. 准备工作: 1.这次地图数据就用Esri提供的http://server.arcgisonline.com ...

  9. unity3d NavMeshAgent 寻路画线/画路径

    今天在群里看见有个小伙在问Game视图寻路时怎么画线 正好前几天写了个寻路,而且自己也不知道具体怎么在寻路时画线,所以决定帮帮他,自己也好学习一下 在百度查了一下资料,直接搜寻路画路径.寻路画线... ...

随机推荐

  1. OpenCV中图像指针注意点

    1.cvQueryFrame方法从摄像头或文件中抓取的帧图像是不能被释放和修改的 2.不要用delete删除,一定要用cvReleaseImage删除且要带有&符号.

  2. jQuery日历和日期选取插件

    参考网站:http://developer.51cto.com/art/201103/248670.htm http://www.open-open.com/ajax/3_Calendar.htm 推 ...

  3. TL-WR703 USB不稳定/当前的总结

    http://see.sl088.com/wiki/WR703_USB%E4%B8%8D%E7%A8%B3%E5%AE%9A/%E5%BD%93%E5%89%8D%E7%9A%84%E6%80%BB% ...

  4. Vehicle’s communication protocol

    http://www.crecorder.com/techInfo/commuProtocols.jsp COMMUNICATION PROTOCOLS A “communication protoc ...

  5. Java内存区域分析

    程序计数器 指令运行的指示器. 每一个线程都有独立的程序计数器,互无影响,我们称这类区域为线程私有的内存. 运行Java方法,计数器记录的是正在运行的虚拟机字节码指令地址;假设运行的是native方法 ...

  6. javascript优化

    javaScript是一门解释性的语言.它不像java.C#等程序设计语言.由编译器先进行编译再运行.而是直接下载到用户的客户端进行执行.因此代码本身的优劣就直接决定了代码下载的速度以及执行的效率. ...

  7. Educational Codeforces Round 7 B. The Time 水题

    B. The Time 题目连接: http://www.codeforces.com/contest/622/problem/B Description You are given the curr ...

  8. POJ 2309 BST 树状数组基本操作

    Description Consider an infinite full binary search tree (see the figure below), the numbers in the ...

  9. 【JavaScript】你知道吗?Web的26项基本概念和技术

    Web开发是比较费神的,需要掌握很多很多的东西,特别是从事前端开发的朋友,需要通十行才行.今天,本文向初学者介绍一些Web开发中的基本概念和用到的技术,从A到Z总共26项,每项对应一个概念或者技术. ...

  10. 使用Visual Studio创建简单的自己定义Web Part 部件属性

    使用Visual Studio创建简单的自己定义Web Part 部件属性 自己定义属性使用额外的选项和设置拓展你的Web part部件.本文主要解说怎样使用Visual Studio创建简单的自己定 ...