canvas判断边距,反弹和拖拽的综合实例

效果如图所示,可以实现精准拖拉和触界反弹
var canvas = document.getElementById("canvas");
	var cxt = canvas.getContext("2d");
	var centerX = canvas.width / 2;
	var centerY = canvas.height / 2;
	var balles = [];
function Ball(x, y, radius, speed) {
		this.x = x;
		this.y = y;
		this.radius = radius;
		this.speed = speed;
	}
	var speed = {
		x: 0,
		y: 0
	};
	balles.push(new Ball(centerX, centerY, 30, speed));
	var isPressed = false;
	var ball = balles[0];
	var DownX = 0;
	var DownY = 0;
	var CsX = 0,
		CsY = 0;
function drawBall() {
		cxt.clearRect(0, 0, canvas.width, canvas.height)
		cxt.beginPath();
		cxt.fillStyle = "red";
		if(!isPressed) {
			ball.x += ball.speed.x;
			ball.y += ball.speed.y;
		}
		if(ball.x > canvas.width - ball.radius || ball.x < 0 + ball.radius) {
			//					ball.x=centerX;
			//					ball.y=centerY;
			//					ball.speed={x:0,y:0}
			ball.speed.x = -ball.speed.x;
}
		if(ball.y > canvas.height - ball.radius || ball.y < 0 + ball.radius) {
			ball.speed.y = -ball.speed.y;
		}
		cxt.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2, true);
		cxt.fill();
		cxt.closePath();
		requestAnimationFrame(drawBall);
	}
function isMoveUpBall(ball, x, y) {
		var vx = x - ball.x;
		var vy = y - ball.y;
		var dist = Math.sqrt(vx * vx + vy * vy);
		if(dist < ball.radius) {
			return true;
		} else {
			return false;
		}
	}
function draw(event) {
		var x = event.point.x + CsX;
		var y = event.point.y + CsY;
		console.log(event.point.x, x)
		if(isPressed && isMoveUpBall(ball, event.point.x, event.point.y)) {
			ball.x = x;
			ball.y = y;
			ball.speed.x = x - DownX;
			ball.speed.y = y - DownY;
			DownX = x;
			DownY = y;
		}
	}
function move(event) {
		draw(event);
	}
function down(event) {
		isPressed = true;
		DownX = event.point.x;
		DownY = event.point.y;
		draw(event);
	}
function up(event) {
		isPressed = false;
		draw(event);
	}
	window.onload = function() {
		drawBall();
		tool.MT(canvas, move, down, up);
	}
canvas判断边距,反弹和拖拽的综合实例的更多相关文章
- [转]人人网首页拖拽上传详解(HTML5 Drag&Drop、FileReader API、formdata)
		人人网首页拖拽上传详解(HTML5 Drag&Drop.FileReader API.formdata) 2011年12月11日 | 彬Go 上一篇:给力的 Google HTML5 训练营( ... 
- 通过layout实现可拖拽自动排序的UICollectionView
		文/CenturyGuo(简书作者)原文链接:http://www.jianshu.com/p/8d1bf1838882著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. Translat ... 
- HTML5拖拽功能drag
		1.创建拖拽对象 给需要拖拽的元素设置draggable属性,它有三个值: true:元素可以被拖拽:false:元素不能被拖拽:auto: 浏览器自己判断元素是否能被拖拽. 2.处理拖拽事件当我们拖 ... 
- html5  Sortable.js 拖拽排序源码分析
		最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的. 本帖属于原创,转载请出名出处. 官网http:// ... 
- Android4.0 Launcher拖拽原理分析
		在Android4.0源码自带的Launcher中,拖拽是由DragController进行控制的. 1) 先来看看类之间的继承关系 2)再来看看Launcher拖拽流程的时序图 1.基本流程: ... 
- Qt::QWidget 无默认标题栏边框的拖拽修改大小方式
		开发环境:win10+vs2015+qt5.9.1 背景:开发过程中,一般很少会使用系统提供的标题栏和边框:往往都是自定义一个自己设计的方案.这时候在QWidget中需要加上flag:Qt::Fram ... 
- jQuery UI API - 可拖拽小部件(Draggable Widget)(转)
		所属类别 交互(Interactions) 用法 描述:允许使用鼠标移动元素. 版本新增:1.0 依赖: UI 核心(UI Core) 部件库(Widget Factory) 鼠标交互(Mouse I ... 
- HTML5 drag & drop 拖拽与拖放
		关键词: 1. draggable:规定元素是否可拖动的,draggable=true可拖动 2. dataTransfer:拖拽对象用来传递的媒介,使用方式:event.dataTransfer 3 ... 
- canvas 图片拖拽旋转之二——canvas状态保存(save和restore)
		引言 在上一篇日志“canvas 图片拖拽旋转之一”中,对坐标转换有了比较深入的了解,但是仅仅利用坐标转换实现的拖拽旋转,会改变canvas坐标系的状态,从而影响画布上其他元素的绘制.因此,这个时候需 ... 
随机推荐
- css font-weight原理
			为什么要记录一下?因为今天我要设置一个字符加粗,然后就用font-weight:200,没有任何效果.现在看来很可笑,400才相当于normal,200怎么加粗,奇怪的是也没有变细.所以得研究一下fo ... 
- 平面直接坐标系线段相交问题(小Q(钟神)的问题)
			[问题描述] 小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在?轴正半轴和?轴正半轴分别挑选?个点.随后,他将 ... 
- Flash 二进制传图片到后台Java服务器接收
			需求:把客户端处理过的图片返还给服务器Flash端代码 01 package {02 import com.adobe.images.JPGEncoder; 03 import ... 
- Linux强化论:15步打造一个安全的Linux服务器
			Linux强化论:15步打造一个安全的Linux服务器 Alpha_h4ck2016-11-30共28761人围观 ,发现 8 个不明物体专题系统安全 可能大多数人都觉得Linux是安全的吧?但我要告 ... 
- NOI2004 郁闷的出纳员
			Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ... 
- P3384 【模板】树链剖分
			P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ... 
- poj3270
			Cow Sorting Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6750 Accepted: 2633 Descr ... 
- ASP.NET 中执行 URL 重写
			具体实现步骤(其中的一种实现方法): 一.下载相关的DLL(ActionlessForm.dll和UrlRewriter.dll) http://download.csdn.net/detail/yi ... 
- Construct Binary Tree from Inorder and Postorder Traversal
			Construct Binary Tree from Inorder and Postorder Traversal Given inorder and postorder traversal of ... 
- Delete Node in a Linked List
			Write a function to delete a node (except the tail) in a singly linked list, given only access to th ... 
