首页 > 其他分享 >前端实现刮刮卡的效果

前端实现刮刮卡的效果

时间:2024-08-12 10:31:06浏览次数:11  
标签:canvas 鼠标 效果 前端 ctx value 刮刮卡 addEventListener 图层

 先来一张图看看,这是现实中的,那么我们如何在程序上实现这样的效果呢,主流方案是采用canvas来实现

首先要实现这种效果,核心点是了解canvas的globalCompositeOperation属性,这个属性的作用是控制canvas上不同图层之间的显示效果,传送门

我们这里只需要使用到"destination-out"属性,这个属性描述的效果是,当新图层绘制到原始图层上时候,原始图层保持在新图层不重叠的部分

 有了这个效果之后,我们只需要将要显示的东西放置在canvas后面就可以了,至于刮卡的效果,就是在mosemove事件里面,动态绘制透明的图层到canvas上就好了

<script setup lang="ts">
import { onMounted, shallowRef } from "vue";

const w = 300,
    h = 150;
const ctx = shallowRef<CanvasRenderingContext2D | null>(null);
const mousedown = shallowRef(false);

function init() {
    const canvas = document.getElementById("scratch") as HTMLCanvasElement;
    canvas.addEventListener("touchstart", eventDown); //鼠标移动开始
    canvas.addEventListener("touchend", eventUp); //鼠标移动结束
    canvas.addEventListener("touchmove", eventMove); //鼠标移动
    canvas.addEventListener("mousedown", eventDown); //鼠标点击
    canvas.addEventListener("mouseup", eventUp); //鼠标松开
    canvas.addEventListener("mousemove", eventMove); //鼠标移动中
    ctx.value = canvas.getContext("2d");
    if (ctx.value) {
        ctx.value.fillStyle = "gray"; //灰色
        ctx.value.fillRect(0, 0, w, h); //顶部绘图填充矩阵灰色
        ctx.value.globalCompositeOperation = "copy";
    }
}

function eventDown(e) {
    //监听鼠标按住
    e.preventDefault();
    mousedown.value = true;
}
function eventUp(e) {
    //监听鼠标松开
    e.preventDefault();
    mousedown.value = false;
}
function eventMove(e) {
    //监听鼠标按住并移动,执行绘图函数
    e.preventDefault();
    if (mousedown.value) {
        var x = (e.clientX + document.body.scrollLeft || e.pageX) - 0 || 0,
            y = (e.clientY + document.body.scrollTop || e.pageY) - 0 || 0;
        ctx?.value?.beginPath(); //绘图开始路径
        ctx?.value?.rect(x, y, 20, 20); //创建一个正方形刮刮痕迹形状
        ctx?.value?.fill();
    }
}

onMounted(() => {
    init();
});
</script>

<template>
    <div>
        <canvas id="scratch" width="300px" height="150px"></canvas>
        <div
            id="background"
            class="w-300px h-150px bg-blue absolute top-0 left-0 z--1"
        ></div>
    </div>
</template>

<style>
#background {
    background-size: contain;
    background-image: url("https://wallpaperm.cmcm.com/b26f4834677e2f0c2cedbd24788b4362.jpg");
}
</style>

 

标签:canvas,鼠标,效果,前端,ctx,value,刮刮卡,addEventListener,图层
From: https://www.cnblogs.com/aursordev/p/18354436

相关文章

  • 【待做】【前端开发系列】 class 类的私有属性
    https://mp.weixin.qq.com/s/f-ShUeDXUQlQIwVCrAVgSAclass类的私有属性前端工作室前端精髓2024年08月11日10:51北京图片私有属性是常规的类的公有属性(包括类字段、类方法等)的对应。私有属性通过添加#前缀来创建,在类的外部无法合法地引用。这些类属性的私有封装由JavaS......
  • 前端安全问题汇总
    1、Nginx相关1.1、升级Nginx版本及时升级Nginx版本,新版本包含对旧版本的漏洞修复1.2、版本号隐藏版本号的显示也被扫描软件识为一种不安全的行为2、具有不安全、不正确或缺少SameSite属性的Cookie可以直接在Nginx下设置location/{add_headerSet-Cookie"Path......
  • 解决LocalDateTime返回前端数据为数组结构的问题
    问题现象解决办法如下1、使用@JsonFormat@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")结果2、使用SpringMVC提供的ExtendMessageConverters@Slf4j@ConfigurationpublicclassWebMvcConfigextendsWebMvcConfigurationSupport{/**......
  • 【前端】Typescript使用教程
    目录一、概述二、 TypeScript开发环境2.1安装和设置2.2编译和运行2.3工具和编辑器支持三、 TypeScript基本语法3.1基本类型3.2接口3.3类3.4函数3.5泛型3.6模块3.7高级类型四、TypeScript示例4.1枚举(Enumerations) 4.2类型别名(TypeAliases)4.3......
  • 前端:CSS选择器(级联/层叠样式单)--用作装饰
    1.选择器:给谁加样式三种样式如果对于不同的方面,效果叠加,如果是相同的方面,行内样式的优先级最高,外部样式和内部样式的优先级相等,谁在上面先用谁2.css的语法规则:selector{property:value;property:value;}/*基本选择器*//*1.元素选择器根据元素名称做......
  • 前端cookie为什么无法传递给后端
    异常描述在进行登录权限校验时,需要使用cookie。然而,在设置cookie时会出现以下异常,导致后端session为空异常。前端已经设置WITH_CREDENTIALS:true。解决办法将访问的127.0.0.1修改为使用localhost进行访问,就可以携带上cookie了。可能原因1.Cookie的域名限制Cookie......
  • Web前端开发环境搭建
    安装node.js和npm上官网下载:https://nodejs.org/zh-cn不管macOS还是Windows,下载的都是安装程序,按提示完成即可。安装前的提示如下:Thispackagewillinstall: • Node.jsv20.16.0to/usr/local/bin/node • npmv10.8.1to/usr/local/bin/npm安装成功后,可看到如......
  • 2024 款:最新前端技术趋势
    Hello,大家好,我是Sunday。上一次的时候聊了那么些已经落后的前端开发技术。但是光知道什么技术落后了是不够的,咱们还得知道前端最新的技术趋势是什么。所以,今天这篇文章,咱们就来聊一聊,最新前端技术趋势。01:反TypeScript大家先不要着急骂我,大家先想一想:“JS的免于强类型......
  • 425.响应式的境外旅游私人订制网站 大学生期末大作业 Web前端网页制作 html+css+js
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有Web前端网页制作的各行各业的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这......
  • 前端黑科技:使用 JavaScript 实现网页扫码功能
    在数字化时代,二维码已经渗透到我们生活的方方面面。从移动支付到产品溯源,二维码凭借其便捷性和高效性,成为了信息传递的重要载体。而随着前端技术的不断发展,我们甚至可以使用JavaScript在网页端实现二维码扫描功能,为用户提供更加便捷的操作体验。本文将带您深入了解如何使用Jav......