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
Nov 25 Javascript
javascript获取当前日期时间及其它操作函数
Jan 11 Javascript
json的前台操作和后台操作实现代码
Jan 20 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
Feb 21 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
js数字计算 误差问题的快速解决方法
Feb 28 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
使用Vue自定义数字键盘组件(体验度极好)
Dec 19 Javascript
如何为你的JS项目添加智能提示与类型检查详解
Mar 12 Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 Javascript
基于js实现逐步显示文字输出代码实例
Apr 02 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php类
2006/11/27 PHP
php 验证码实例代码
2010/06/01 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
JavaScript 学习笔记二 字符串拼接
2010/03/28 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
ES6对象操作实例详解
2020/05/23 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
Django添加feeds功能的示例
2018/08/07 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
linux面试相关问题
2012/08/11 面试题
普通院校学生的自荐信
2013/11/27 职场文书
财务会计人员岗位职责
2013/11/30 职场文书
大一新生军训时的自我评价分享
2013/12/05 职场文书
实用求职信范文分享
2013/12/25 职场文书
学习十八大报告感言
2014/02/04 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
换届选举主持词
2015/07/03 职场文书
三八妇女节主持词
2015/07/04 职场文书
python数字类型和占位符详情
2022/03/13 Python
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang
Java获取字符串编码格式实现思路
2022/09/23 Java/Android