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 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
使用Firebug对js进行断点调试的图文方法
Apr 02 Javascript
IE6,IE7,IE8下使用Javascript记录光标选中范围(已补全)
Aug 28 Javascript
AngularJS入门教程(零):引导程序
Dec 06 Javascript
JS+CSS实现仿msn风格选项卡效果代码
Oct 22 Javascript
Bootstrap文件上传组件之bootstrap fileinput
Nov 25 Javascript
JavaScript 中对象的深拷贝
Dec 04 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
Angular父组件调用子组件的方法
Apr 02 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 Javascript
CountUp.js数字滚动插件使用方法详解
Oct 17 Javascript
原生js实现放大镜组件
Jan 22 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
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
2014/09/22 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
从阿里妈妈发现的几个不错的表单验证函数
2007/09/21 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
2018/03/07 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
Python @property原理解析和用法实例
2020/02/11 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
CSS3实现内凹圆角的实例代码
2017/05/04 HTML / CSS
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
迟到检讨书1000字
2014/01/15 职场文书
毕业实习评语
2014/02/10 职场文书
积极贯彻学习两会精神总结
2014/03/17 职场文书
餐厅筹备计划书
2014/04/25 职场文书
升学宴学生答谢词
2015/01/05 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers