js绘制圆形和矩形的方法


Posted in Javascript onAugust 05, 2015

本文实例讲述了js绘制圆形和矩形的方法。分享给大家供大家参考。具体如下:

这里使用js来绘制圆形和矩形,支持选择图形的背景颜色,同时可设置圆角矩形、半径、正圆、矩形、正方形这几个选项。或许这些图形你不需要,但重要的是让你学会JavaScript绘制图形的方法,这是要表达的核心。

运行效果如下图所示:

js绘制圆形和矩形的方法

具体代码如下:

<!doctype html>
<html>
<head>
<title>js来绘制圆形和矩形</title>
<style>
 *{margin:0; padding:0;}
 #div{position:absolute; background:#ccc;}
 .sel{ margin:30px auto; width:960px; overflow:hidden}
 li{ list-style:none; float:left; width:60px; height:20px;}
 #colors{ width:500px; float:left}
 .selColor{ float:left}
 #radius{ width:40px; height:20px;}
 .red{background:red;}
 .yellow{background:yellow;}
 .blue{background:blue;}
 .pink{background:pink;}
 .black{background:black;}
 .orange{background:orange;}
 .green{ background:green;}
 .xz{ width:340px; float:right;}
 #canvas{ width:960px; height:500px; border:1px solid #ccc; margin:0 auto}
</style>
<script>
function $Id(id)
{
 return document.getElementById(id); 
}
window.onload=function(){
 var oCanvas=$Id('canvas');
 var oRoud=$Id('roud');
 var oRadius=$Id('radius');
 var oCir=$Id('circle');
 var oSqu=$Id('squ');
 var oColors=$Id('colors');
 var aColors=oColors.getElementsByTagName('li');
 var color='red';
 var aInputs=document.getElementsByTagName('input');
 var xz='roud';
 var arr=[];
 for(var i=0;i<aInputs.length;i++)
 {
  if(aInputs[i].type=='checkbox')
  {
   arr.push(aInputs[i]); 
  }
 }
 for(var i=0;i<arr.length;i++)
 {
  arr[i].onclick=function()
  {
   if(!this.checked)
   {
    this.checked=false; 
   }
   else
   {
    for(var j=0;j<arr.length;j++)
    {
     arr[j].checked=false; 
    }
    this.checked=true; 
    xz=this.value;
   }
  } 
 }
 //选择颜色
 for(var i=0;i<aColors.length;i++)
 {
  aColors[i].onclick=function()
  {
   color=this.className; 
  } 
 }
 oCanvas.onmousedown=function(ev)
 {
   if(oCanvas.setCapture)
   {
    oCanvas.setCapture();
   }
   for(var i=0;i<arr.length;i++)
   {
    if(arr[i].checked)
    {
     arr[i].checked=true;
     xz= arr[i].value;
    } 
   }
   var oEv=ev||window.event;
   var disX=oEv.clientX;
   var disY=oEv.clientY;
   var oR=document.createElement('div');
   oR.id="div";
   oR.style.top=disY+'px';
   oR.style.left=disX+'px';
   oR.style.backgroundColor=color;
   document.body.appendChild(oR);
  document.onmousemove=function(ev)
  {
   var oEv=ev||window.event;
   var x=oEv.clientX;
   var y=oEv.clientY;
   if(x<oCanvas.offsetLeft)
   {
    x=oCanvas.offsetLeft; 
   }
   else if(x>oCanvas.offsetLeft+oCanvas.offsetWidth)
   {
    x=oCanvas.offsetLeft+oCanvas.offsetWidth
   }
   if(y<oCanvas.offsetTop)
   {
    y=oCanvas.offsetTop; 
   }
   else if(y>oCanvas.offsetTop+oCanvas.offsetHeight)
   {
    y=oCanvas.offsetTop+oCanvas.offsetHeight
   }
   oR.style.width=Math.abs(x-disX)+'px';
   oR.style.top=Math.min(disY,y)+'px';
   oR.style.left=Math.min(disX,x)+'px';
   switch(xz)
   {
    case 'roud':
     oR.style.height=Math.abs(y-disY)+'px';
     oR.style.borderRadius=oRadius.value+'px';
     break; 
    case 'circle':
     oR.style.height=Math.min(Math.abs(x-disX),Math.abs(y-disY))+'px';
     oR.style.width=Math.min(Math.abs(x-disX),Math.abs(y-disY))+'px';
     oR.style.borderRadius=(Math.min(Math.abs(x-disX),Math.abs(y-disY)))/2+'px';
     break;
    case 'squ':
     oR.style.height=Math.abs(y-disY)+'px';
     break;
    case 'square':
     oR.style.height=Math.min(Math.abs(x-disX),Math.abs(y-disY))+'px';
     oR.style.width=Math.min(Math.abs(x-disX),Math.abs(y-disY))+'px';
   }
  }
  document.onmouseup=function()
  {
   document.onmousemove=null;
   document.onmouseout=null;
   if(oCanvas.releaseCapture)
   {
    oCanvas.releaseCapture();
   } 
  }
  return false;
 }
}
</script>
</head>
<body>
 <div class="sel">
  <span class="selColor">请选择一种颜色</span>
 <ul id="colors">
  <li value="red" class="red"></li>
  <li value="yellow" class="yellow"></li>
  <li value="blue" class="blue"></li>
  <li value="pink" class="pink"></li>
  <li value="black" class="black"></li>
  <li value="orange" class="orange"></li>
  <li value="green" class="green"></li>
 </ul>
 <p class="xz">
  <input type="checkbox" value="roud" id="roud" />圆角矩形
  <label>半径</label><input type="text" value="" id="radius" />
  <input type="checkbox" id="circle" value="circle" />正圆
  <input type="checkbox" id="squ" value="squ" />矩形
  <input type="checkbox" id="square" value="square" />正方形
  </p>
 </div>
 <div id="canvas">
 </div>
</body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript Firefox与IE 替换节点的方法
Feb 24 Javascript
基于jquery的气泡提示效果
May 31 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
Sep 06 Javascript
超简单JS二级、多级联动的简单实例
Feb 18 Javascript
第四章之BootStrap表单与图片
Apr 25 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
Sep 26 Javascript
javascript Function函数理解与实战
Dec 01 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
Feb 26 Javascript
使用Angular CLI从蓝本生成代码详解
Mar 24 Javascript
angular的输入和输出的使用方法
Sep 22 Javascript
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
js+html+css实现手动轮播和自动轮播
Dec 30 Javascript
JavaScript实现自动消除按钮功能的方法
Aug 05 #Javascript
JS版元素周期表实现方法
Aug 05 #Javascript
javascript实现手机震动API代码
Aug 05 #Javascript
JS实现生成会变大变小的圆环实例
Aug 05 #Javascript
JavaScript计算某一天是星期几的方法
Aug 05 #Javascript
JavaScript实现节点的删除与序号重建实例
Aug 05 #Javascript
javascript禁止访客复制网页内容的实现代码
Aug 05 #Javascript
You might like
php 三维饼图的实现代码
2008/09/28 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
PHP+jQuery翻板抽奖功能实现
2015/10/19 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
webpack入门必知必会
2017/01/16 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python探索之修改Python搜索路径
2017/10/25 Python
python openpyxl使用方法详解
2019/07/18 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
迎元旦广播稿
2014/02/22 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
中学总务处工作总结
2015/08/12 职场文书
小学教师教学随笔
2015/08/14 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书