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压缩利器
Feb 20 Javascript
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
Apr 12 Javascript
jquery tools之tooltip
Jul 25 Javascript
JavaScript中出现乱码的处理心得
Dec 24 Javascript
js parsefloat parseint 转换函数
Jan 21 Javascript
javascript 嵌套的函数(作用域链)
Mar 15 Javascript
JQuery给元素添加/删除节点比如select
Apr 02 Javascript
js opener的使用详解
Jan 11 Javascript
Javascript的动态增加类的实现方法
Oct 20 Javascript
Angular路由简单学习
Dec 26 Javascript
详解浏览器缓存和webpack缓存配置
Jul 06 Javascript
vue实现简单跑马灯效果
May 25 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/27 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
JS+Canvas绘制动态时钟效果
2017/11/10 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
详解vue 组件
2020/06/11 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
python分批定量读取文件内容,输出到不同文件中的方法
2018/12/08 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python生成带有表格的图片实例
2019/02/03 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
匡威德国官网:Converse德国
2019/01/26 全球购物
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
商务英语专业毕业生求职信
2014/07/06 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
客房部经理岗位职责
2015/02/02 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
Mysql binlog日志文件过大的解决
2021/10/05 MySQL