概括
canvas是 HTML5 新增的元素,可使用JavaScript脚本来绘制图形。例如:画图,合成照片,创建动画甚至实时视频处理与渲染。
用法
html
|
|
注意:这个宽高写在行内 跟通过id,class来控制宽高是不一样的。
javscript
|
|
方法(基本操作)
所有的方法都是ctx身上的方法
示例:
坐标:左上点为园点,x为从左到右依次递增,y为从上到下依次递增
设置样式
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
绘制一个圆
注意:这里的角度只能以Math.PI算,Math.PI==180度;
|
|
这里的清除,是指清除到背景色。如果你通过ID,CLASS设置了canvas的背景色,那么,清理后会显示你设置的背景色的;
多加练习以后上边提到的方法后我们就可以实现我们的九宫格解锁了
思路
html
javascript
在开始之前,我们先想一下,我们需要做什么,一个九宫格。肯定需要九个圆,九个圆心;所以我们先获取一下这9个圆的圆心;
先获取cnavas的宽高,然后计算得出3个中点,通过中点,得到9个圆的圆心的坐标,这里的flag稍后会解释。
|
|
这里的data就是九个圆心的坐标,接下来我们是需要画圆,这里先封装一个画圆的函数。通过flag来判断是画实心圆跟空心圆这里的flag跟上边的flag是不一样的。
画圆函数
|
|
之后我们需要调用这个函数画9个圆。为了逼真,我们画了大圆跟小圆,这里画了10半径的实心圆跟30半径的空心圆。
这里我们的页面中就会有九个圆在了:
手指触摸事件
接下来我们就需要手指触摸事件
我先介绍一下
触摸开始
触摸开始的时候,我们需要先判断是否在哪一个点上,如果不是在任何一个点上,说明这次触摸不起作用;
首先我们假设他开始点击,就把第一个圆变成红色的点中状态;
在这里你就知道了 data 的 flag 是来判断每一个点的是否被点击过;因为在上边我们改变了data[0].flag=true ,也就是说把第一个点变的选中了。渲染出来就是如图
触摸移动
接下来我们在手指移动过程中,把页面重回,在加上当前点的位置,就变成动态的移动了,我们写move事件,这里手机端的触摸事件的事件源的坐标是在
e.originalEvent.changedTouches[0]身上的。
我们先写一个函数,就是绘制这个当前的点的位置跟已经点击过的位置;
|
|
|
|
这样之后,在move 的时候效果就会如图所示:
大家思考一下,到了这一步,我们所缺的就是一个判断而已;就是判断当前的位置在哪一个点的范围内。把哪一个点的flag变成true就好;
接下来我们实现这一步
判断范围
我们先判断一个大范围。就是说目前这个点在哪个区域里面
计算是哪个点开始点击的; 返回一个点的id
这里面的条件就是边界,0-100-200-300;
|
|
判断是否在圆范围
通过这个我们可以判断出一个大范围;接下来我们更加精密的判断一个小范围
这里我们判断出了大的范围。并且说这个是!==10,意思就是手指的触摸点是在canvas上,
这里我们换一种想法来思考。
我们前边画的圆的半径是30,那么就是说从这个圆的圆心开始,x|y +30或者-30 就是每个圆的边界,换句话说这就是范围;
我们用当前触摸点的x,y通过set()获取一个大的范围,在这个大范围内。我们再判断。 data[set()].x,data[set()].y 跟我们现在的x,y相减一下。如果是在30范围内。这里我用Math.abs()取正一下。这个数<30. 那么就说明是在这个点内。
我们就可以把这个点的data[点].flag=true;
触摸停止
鼠标抬起就更好了;把这个canavs清空重绘就好;或者显示,都可以安你的需求来。,这里我选择的是重绘
全部代码
我们把代码概括一下;
总结
在这里我详细讲述了如何用canavs来实现九宫格解锁的功能。可能比较乱,大家多多包涵。不过内容比较详细,所用的方法也是新手易懂的。
在我的github上有一个我用这个方法写的成功案例,如果需要可以参考一下.谢谢。
本文总阅读量次