java做橡皮擦效果_基于canvas剪辑区域功能实现橡皮擦效果
这篇文章主要介绍了基于canvas剪辑区域功能实现橡皮擦效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下
这是基础结构 没什么好说的
?
Document
*{padding: 0;margin: 0}
a{text-decoration: none}
img{border: none}
ul,ol{list-style: none}
br{font-size: 0;line-height: 0;font-size: 0}
canvas{border: 1px solid red;background: white}
body{background: gray;text-align: center}
Stroke color:
red
green
blue
orange
cornflowerblue
goldenrod
navy
purple
purple
Fill color:
semi-transparent red
green
semi-transparent blue
orange
semi-transparent cornflowerblue
goldenrod
navy
purple
582735936
Draw
Erase
Eraser:
circle
square
582735936
Eraser width:
25
50
75
100
125
150
175
200
下面是重点的js
这里有个坑要十分注意 调用clip()方法的时候,所定义的剪辑区域总是局限于期初的那个剪辑区域范围。
简单来说 clip()方法总是在上一次的剪辑区域基础上进行操作,所以说我们要把clip()方法放在save()和restore()方法中
var canvas = document.getElementById('canvas'),
context = canvas.getContext('2d'),
strokeStyleSelect = document.getElementById('strokeStyleSelect'), //画图的描边颜色
fillStyleSelect = document.getElementById('fillStyleSelect'), //画图填充颜色
drawRadio = document.getElementById('drawRadio'), //画图按钮
eraserRadio = document.getElementById('eraserRadio'), //橡皮擦按钮
eraserShapeSelect = document.getElementById('eraserShapeSelect'), //橡皮擦形状
eraserWidthSelect = document.getElementById('eraserWidthSelect'), //橡皮擦宽度
ERASER_LINE_WIDTH = 1,
drawingSurfaceImageData,
lastX,
lastY,
mousedown = {},
rubberbandRect = {},
dragging = false
function windowToCanvas(x,y){ //这个函数的作用是捕捉鼠标点在canvas上的坐标
var bbox=canvas.getBoundingClientRect()
return {
x:x-bbox.left,
y:y-bbox.top
}
}
function saveDrawingSurface(){ //这个函数的作用是初始化读取画布信息并储存起来
drawingSurfaceImageData=context.getImageData(0,0,canvas.width,canvas.height)
}
function restoreDrawingSurface(){ //这个函数的作用是读取画布信息
context.putImageData(drawingSurfaceImageData,0,0)
}
function drawGrid(){ //这个函数的作用是填充进橡皮擦的剪辑区域
context.save()
context.fillStyle="#fff"
context.fillRect(0,0,canvas.width,canvas.height)
context.restore()
}
function drawrubber(x,y){
context.beginPath()
context.arc(x,y,eraserWidthSelect.value,0,Math.PI*2,false)
context.clip() 582735936
}
function drawCri(x,y){
var x_width=Math.abs(x-mousedown.x)
var y_width=Math.abs(y-mousedown.y)
var radius=Math.sqrt(x_width*x_width+y_width*y_width)
context.save()
context.beginPath()
context.fillStyle=fillStyleSelect.value;
context.arc(mousedown.x,mousedown.y,radius,0,Math.PI*2,false)
context.fill()
context.restore()
}
canvas.οnmοusedοwn=function(e){
var loc=windowToCanvas(e.clientX,e.clientY)
mousedown.x=loc.x
mousedown.y=loc.y
lastX=loc.x
lastY=loc.y
saveDrawingSurface()
dragging=true
}
canvas.οnmοusemοve=function(e){
if(dragging){
var loc=windowToCanvas(e.clientX,e.clientY)
if(drawRadio.checked){ //如果是画图状态
//
restoreDrawingSurface()
drawCri(loc.x,loc.y)
}else{ //如果是橡皮擦状态
context.save()
drawrubber(loc.x,loc.y)
drawGrid()
context.restore()
}
}
}
canvas.οnmοuseup=function(e){
dragging=false;
var loc=windowToCanvas(e.clientX,e.clientY)
if(drawRadio.checked){
lastX=loc.x;
lastY=loc.y;
restoreDrawingSurface()
drawCri(lastX,lastY)
}else{
context.save()
drawrubber(loc.x,loc.y)
drawGrid()
context.restore()
}
}
总结
以上所述是小编给大家介绍的基于canvas剪辑区域功能实现橡皮擦效果,希望对大家有所帮助
java做橡皮擦效果_基于canvas剪辑区域功能实现橡皮擦效果相关推荐
- 基于canvas剪辑区域功能实现橡皮擦效果
这篇文章主要介绍了基于canvas剪辑区域功能实现橡皮擦效果,非常不错,具有参考借鉴价值,需要的朋友可以参考下 这是基础结构 没什么好说的 ?<!DOCTYPE html> <htm ...
- vue和Java做数据交互_基于vue和springmvc前后端分离,json类接口调用介绍
基于vue和springmvc前后端分离,json类接口调用介绍 版本要求:spring-3.2.9.RELEASE.vue-2.9.2.axios-0.17.1,其中axios作为http clie ...
- java做同学录管理系统_基于jsp的同学录管理系统-JavaEE实现同学录管理系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的同学录管理系统, 该项目可用各类java课程设计大作业中, 同学录管理系统的系统架构分为前后台两部分, 最终实现在 ...
- 用Java做手机备忘录_基于安卓Android的手机备忘录设计(AndroidStudio)
基于安卓Android的手机备忘录设计(AndroidStudio)(论文11300字,程序代码) 摘要:互联网技术和智能手机的普及,使人们接收到的信息变得越来越碎片化和多元化,人脑很难一一记下自己所 ...
- 利用java做前端连接数据库_基于java的前端与数据库的交互
在之前很长一段时间都在搞前端部分,然后又大概了解了下数据库,现在想着把二者交融在一起吧-- 首先我在Eclipse中的布局是这样的,也不知道合不合理: 用到了四个文件,分别是用于用户输入信息的前端界面 ...
- 用Java做手机备忘录_基于安卓Android的备忘录系统APP的设计(Eclipse)
基于安卓Android的备忘录系统APP的设计(Eclipse)(任务书,开题报告,论文13000字,程序代码) 摘要 随着移动互联网的高速发展,智能手机的使用已经普及.为了能让智能手机发挥更大的应用 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言
点赞是一个互动性很强的功能,网站加入点赞可以增强用户之间的亲密度,可以利用点赞排出受欢迎文章或者其他的列表,所以今天教大家如何做一个类似于微博.QQ空间的点赞功能 需求分析: 首先要明确这个功能是需要 ...
- canvas换图时候会闪烁_基于Canvas实现的高斯模糊(上)「JS篇」
作者:iNahoo 转发链接:https://mp.weixin.qq.com/s/5TxPjznpEBku_ybSMBdnfw 目录 基于Canvas实现的高斯模糊(上)「JS篇」本篇 基于Canv ...
最新文章
- Codeforces 337D Book of Evil:树的直径【结论】
- mysql 运行 sql 脚本
- 成功解决.sh: line 6: syntax error near unexpected token `do
- Python学习心得(二) : 更新列表
- java 的toString()函数
- SAP Spartacus buildCmsStructure 构建逻辑
- 打印管理 php,window_强化Windows Server 2008下的打印管理, 打印管理从来都是Windows Se - phpStudy...
- github可以刷星吗_GitHub 没有 star,该写进简历里吗?
- 怎样快速的学习微信小程序
- libusb-win32
- Python下的中文分词实现
- 基于 element ui 之 ui-tooltip 组件
- 浅析帧、帧数、帧率、FPS区别
- 二十余岁时的社会观(一)
- Scala隐式转换的问题分析--String隐式转换为Int
- 初识Mongdb之数据查询篇(二)
- 程序员编程艺术第一 三十八章集锦与总结,及Github地址 PDF下载
- CocoStudio UI 编辑器的使用
- 矩阵基础知识------秩+线性相关和线性无关
- RENIX_802.3ah功能介绍(下)——网络测试仪实操