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 相关文章推荐
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
Nov 14 Javascript
javascript setinterval 的正确语法如何书写
Jun 17 Javascript
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
jQuery中position()方法用法实例
Jan 16 Javascript
浅谈javascript原型链与继承
Jul 13 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
Oct 15 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
js变量值传到php过程详解 将php解析成数据
Jun 26 Javascript
微信小程序页面渲染实现方法
Nov 06 Javascript
ES6如何用一句代码实现函数的柯里化
Jan 18 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人民币金额转大写实例代码
2015/10/02 PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
2019/05/08 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
jquery连缀语法如何实现
2012/11/29 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
vue组件之间的数据传递方法详解
2019/04/19 Javascript
JavaScript 中的执行上下文和执行栈实例讲解
2021/02/25 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
python 中如何获取列表的索引
2019/07/02 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
python文字转语音实现过程解析
2019/11/12 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
python Tornado框架的使用示例
2020/10/19 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
局域网标准
2016/09/10 面试题
幼儿园英语教学反思
2014/01/30 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
考察邀请函范文
2015/01/31 职场文书
实习生辞职信范文
2015/03/02 职场文书
2015年共青团工作总结
2015/05/15 职场文书
写作技巧:如何撰写一份优秀的营销策划书
2019/08/13 职场文书