zoukankan      html  css  js  c++  java
  • html5 canvas画图之图形随拖动而复制(有操作指示)

       学习html5 canvas,写了一个小练习来加深理解,可以实现图形随拖动而复制。

       

    <!DOCTYPE html>
    <html>
    	<head>
    	 <meta charset="utf-8">
    	 <title>demoCanvas2</title>
    	 <style>
    	    *{margin:0px;padding:0px;}
    	 
    	   #out{
    	     position:absolute;
    		 800px;
    		 height:500px;
    		 position:absolute;
    		 top:0px;
    		 left:0px;
    		 border:1px solid #ff0000;
    		 }
    		 
    		.demo1{
    		  position:absolute;
    		  100px;
    		  height:100px;
    		  top:10px;
    		  left:10px;
    		  border:1px solid #ff0000;
    		}
    		
    		#util{
    		   position:absolute;
    		   350px;
    		   height:300px;
    		   top:50px;
    		   right:50px;
    		   }
    		 </style>
    	</head>
    	
    	<body>
    	  <div id="out">
    	    <canvas id="demo1" class="demo1"></canvas>
    	  </div>
    	  
    	  <div id="util">
    	    <p>
    		<h2>操作简介</h2>
    		移动图形:单击图形不放并移动。<br/>
    		复制图形:松开鼠标。<br/>
    		结束操作:双击鼠标。
    		
    		</p>
    	    鼠标横坐标:<input type="text" id="lan1"/><br>
    		鼠标纵坐标:<input type="text" id="lan2"/>
    	  </div>
    	  
    	     <script>
    		//绘制基本图像
    		  var demo1=document.getElementById("demo1");
    		  var pen1=demo1.getContext("2d");
    		  pen1.moveTo(2,2);
    		  pen1.lineTo(20,100);
    		  pen1.lineTo(200,40);
    		  pen1.lineTo(2,2);
    		  pen1.stroke();
    		  
    		 //鼠标单击demo1对象时
    		  demo1.onmousedown=function(e){
    		  // 记录demo1的宽和高
    		  var myWidth=e.clientX-demo1.offsetLeft;
    		  var myHeight=e.clientY-demo1.offsetTop;
    		  
    		  //记录此时坐标位置
    		  var left0=this.offsetLeft;
    		  var top0=this.offsetTop;
    		  
    		  //鼠标移动时    
    		  demo1.onmousemove=function(e){
    		  //demo1跟随鼠标坐标
    		  demo1.style.left=e.clientX-myWidth+"px";
    		  demo1.style.top=e.clientY-myHeight+"px";
    		  
    		  //设置边界,当对象移动到右边界,左边距始终保持700px
    		  if(demo1.offsetLeft>=700){
    		      demo1.style.left=700+"px";
    		  }
    		  // 当对象移动到左边界,左边距始终为0px 
    		  if(demo1.offsetLeft<=0){
    		     demo1.style.left=0+"px";
    		  }
    		  //当对象移动到下边界,上边距始终为400px
    		  if(demo1.offsetTop>=400){
    		     demo1.style.top=400+"px";
    			 
    		  }
    		  //当对象移动到上边界,上边距始终为0px
    		  if(demo1.offsetTop<=0){
    		      demo1.style.top=0+"px";
    		  }
    		   //显示鼠标坐标位置
    		  var lan1=document.getElementById("lan1");
    		  var lan2=document.getElementById("lan2");
    		  lan1.value=e.clientX;
    		  lan2.value=e.clientY;
    		  
    		}
    		
    		  //当鼠标松开时
    		   demo1.onmouseup=function(){
    			    
    				 //创建新标签<canvas>
    	       var demo=document.createElement("canvas");
    	               //动态设置<canvas>对象的样式
    	       demo.style.cssText="100px;height:100px;position:absolute;left:"+left0+"px;"+"top:"+top0+"px;border:1px solid #ff0000";
    	              //将对象加入到body中
    	       var body=document.getElementsByTagName("body")[0];
    	       body.appendChild(demo);
    	   
    	       var pen=demo.getContext("2d");
    	         pen1.moveTo(2,2);
    		     pen.lineTo(20,100);
    		     pen.lineTo(200,40);
    		     pen.lineTo(2,2);
    		     pen.stroke();
    		 } 
    			 
    		   //双击鼠标时结束
    		 window.ondblclick=function(){
    	           alert("执行结束!");
    			 }
    		         }
    	 </script>
    	  
    	  
    	  <div id="test"></div>
        </body>
    </html>
    

      如果您觉得我写的东西对您有些帮助,请帮我点个推荐,互粉交个学习路上的好友,我是菜鸟,你的鼓励是我前进的动力。

  • 相关阅读:
    Java++:常用工具|性能监测|服务监控
    Vue++:Vuecli4.x 的配置文件配置方法
    Vue++: gyp ERR! find Python
    Node++:Windows 环境搭建 Vue 开发环境
    linux++:free h 详解
    踩坑纪:windows 系统下,nodejs版本管理器无法使用n来管理
    Node++:NodeJs 版本管理工具(n | nvm)n教程
    Vue++:Error: 'XXX' is defined but never used (nounusedvars)报错的解决方案
    [MOSS]关闭弹出窗口
    安装 64 位版本的 Office 2010 后,无法查看数据表视图中的列表
  • 原文地址:https://www.cnblogs.com/zhu-xingyu/p/5211249.html
Copyright © 2011-2022 走看看