html转盘游戏,html5大转盘抽奖实例源码(基于vue.js)

时间: 2023-11-28 11:05:10 浏览: 37
以下是一个基于Vue.js的HTML5大转盘抽奖实例源码: HTML部分: ```html <div id="app"> <div class="wrapper"> <div class="pan-wrapper"> <canvas id="canvas" width="400" height="400"></canvas> <img class="pointer" src="./assets/pointer.png" alt="pointer" @click="start" :class="{rotate: isStarted}"> </div> <div class="result" v-if="!isStarted"> <p v-if="!prize">点击开始抽奖</p> <p v-else-if="prize === '谢谢参与'">{{ prize }}</p> <p v-else>恭喜您获得 {{ prize }}!</p> </div> </div> </div> ``` CSS部分: ```css .wrapper { display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #eee; } .pan-wrapper { position: relative; } .pointer { position: absolute; top: 130px; left: 130px; width: 140px; cursor: pointer; transition: all 3s ease; } .rotate { transform: rotate(7200deg); } .result { text-align: center; margin-top: 20px; font-size: 24px; font-weight: bold; } ``` JavaScript部分: ```js new Vue({ el: '#app', data: { isStarted: false, // 是否已经开始抽奖 prizes: [ '一等奖', '二等奖', '三等奖', '四等奖', '五等奖', '谢谢参与' ], prize: null // 中奖结果 }, methods: { start() { if (this.isStarted) return; this.isStarted = true; this.prize = null; const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // 绘制转盘 ctx.clearRect(0, 0, 400, 400); ctx.beginPath(); ctx.arc(200, 200, 190, 0, 2 * Math.PI); ctx.fillStyle = '#ffdd00'; ctx.fill(); for (let i = 0; i < this.prizes.length; i++) { ctx.beginPath(); ctx.moveTo(200, 200); ctx.arc(200, 200, 180, i * Math.PI / (this.prizes.length / 2), (i + 1) * Math.PI / (this.prizes.length / 2)); ctx.closePath(); ctx.fillStyle = i % 2 === 0 ? '#ffea00' : '#fff'; ctx.fill(); // 绘制文字 ctx.save(); ctx.translate(200, 200); ctx.rotate(i * Math.PI / (this.prizes.length / 2) + (Math.PI / this.prizes.length)); ctx.fillStyle = '#f00'; ctx.font = 'bold 20px Arial'; ctx.fillText(this.prizes[i], 95, 5); ctx.restore(); } // 开始旋转 const rotate = () => { const speed = 30; // 转盘旋转速度 let count = 0; let timer = null; const rotateFn = () => { count += speed; if (count >= 360) { clearInterval(timer); timer = null; this.isStarted = false; const index = Math.floor(Math.random() * this.prizes.length); this.prize = this.prizes[index]; return; } ctx.translate(200, 200); ctx.rotate(speed * Math.PI / 180); ctx.translate(-200, -200); this.isStarted && requestAnimationFrame(rotateFn); }; timer = requestAnimationFrame(rotateFn); }; rotate(); } } }); ``` 该实例使用了HTML5的Canvas绘制转盘,同时使用Vue.js实现了抽奖功能。用户点击“开始抽奖”按钮,转盘开始旋转。当转盘旋转一定角度后,随机产生一个中奖结果。实现过程中需要注意旋转的速度和旋转角度的计算。

相关推荐

最新推荐

recommend-type

Vue开发Html5微信公众号的步骤

主要介绍了Vue开发Html5微信公众号的步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

vue删除html内容的标签样式实例

今天小编就为大家分享一篇vue删除html内容的标签样式实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)

本文主要介绍了利用Vue.js+Node.js+MongoDB实现一个博客系统,这个博客使用Vue做前端框架,Node+express做后端,数据库使用的是MongoDB。实现了用户注册、用户登录、博客管理、文章编辑、标签分类等功能,需要的朋友...
recommend-type

基于Vue.js的在线设计开放平台研究与实现

基于MVVM前端框架Vue.js,搭建了提高协同效率和知识汇集的在线设计开发平台系统,更好地服务设计师、前端工程师及产品经理。功能包含设计原则、组件呈现以及资源下载几个功能模块,采用Vuecli脚手架搭建项目,http请求库...
recommend-type

VUE页面中加载外部HTML的示例代码

本篇文章主要介绍了VUE页面中加载外部HTML的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。