Vue 幸运大转盘
转盘抽奖主要有两种,指针转动和转盘转动,个人觉得转盘转动比较好看点,指针转动看着头晕,转盘转动时指针是在转盘的中间位置,这里要用到css的transform属性和transition属性,这两个因为不常用最好是上网查查,用法和功能。
在html部分
- <div id="wheel_surf">
- <div class="wheel_surf_title">幸运大转盘</div>
- <div class="lucky-wheel">
- <div class="wheel-main">
- <div class="wheel-pointer-box">
- <div class="wheel-pointer" @click="rotate_handle()" :style="{transform:rotate_angle_pointer,transition:rotate_transition_pointer}"></div>
- </div>
- <div class="wheel-bg" :style="{transform:rotate_angle,transition:rotate_transition}">
- <div class="prize-list">
- <div class="prize-item" v-for="(item,index) in prize_list" :key="index">
- <div class="prize-pic" v-if="item.icon">
- <img :src="item.icon" />
- </div>
- <div class="prize-type">
- {{item.name}}</div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div v-transfer-dom>
- <x-dialog v-model="showHideOnBlur" class="dialog-demo wheel_dialog" hide-on-blur>
- <div class="img-box">
- <div v-show="val == 7" class="noactive">
- <p>谢谢参与!祝您下次好运</p>
- </div>
- <div v-show="val !== 7">
- <p>恭喜你</p>
- <img :src="imgActive" />
- <p>{{item.rewardDesc}}</p> // 获奖返回值
- </div>
- </div>
- <div @click="showHideOnBlur=false">
- <span class="vux-close"></span>
- </div>
- </x-dialog>
- </div>
- </div>
奖项数据
这里的第一个style部分是指针的位置,距离转动的初始值,是固定不变的,第二个style是转盘的位置transform:rotate_angle是转盘转动的角度,transition:rotate_transition是转动的时候它的转动速度,方向,等等属性。rotate_handle()是点击开始转动的事件。prize_list是转盘上面的奖品图片名字列表。
data:
- prize_list: [
- {
- icon: require("../../../../static/WX/img/wheel_big_5.png"), // 奖品图片
- count: , // 奖品级别
- name: "五等奖", // 奖品名称
- isPrize: // 该奖项是否为奖品
- },
- {
- icon: require("../../../../static/WX/img/wheel_big_2.png"),
- count: ,
- name: "二等奖",
- isPrize:
- },
- {
- icon: require("../../../../static/WX/img/wheel_big_4.png"),
- count: ,
- name: "四等奖",
- isPrize:
- },
- {
- icon: require("../../../../static/WX/img/wheel_big_1.png"),
- count: ,
- name: "一等奖",
- isPrize:
- },
- {
- icon: require("../../../../static/WX/img/wheel_big_6.png"),
- count: ,
- name: "六等奖",
- isPrize:
- },
- {
- count: ,
- name: "谢谢参与",
- isPrize:
- },
- {
- icon: require("../../../../static/WX/img/wheel_big_3.png"),
- count: ,
- name: "三等奖",
- isPrize:
- }
- ], //奖品列表
- hasPrize: false, //是否中奖
- start_rotating_degree: , //初始旋转角度
- rotate_angle: , //将要旋转的角度
- start_rotating_degree_pointer: , //指针初始旋转角度
- rotate_angle_pointer: , //指针将要旋转的度数
- rotate_transition: "transform 6s ease-in-out", //初始化选中的过度属性控制
- rotate_transition_pointer: "transform 12s ease-in-out", //初始化指针过度属性控制
- click_flag: true, //是否可以旋转抽奖
- item: {}
methods:
- rotating(index) {
- if (!this.click_flag) return;
- var type = ; // 默认为 0 转盘转动 1 箭头和转盘都转动(暂且遗留)
- var during_time = ; // 默认为1s
- var random = Math.floor(Math.random() * );
- var result_index
- result_index = this.val
- if (this.val == ) { // 这里多余可以不写
- result_index =
- } else if (this.val == ) {
- result_index =
- } else if (this.val == ) {
- result_index =
- } else if (this.val == ) {
- result_index =
- } else if (this.val == ) {
- result_index =
- } else if (this.val == ) {
- result_index =
- } else if (this.val == ) {
- result_index =
- }
- this.valindex = result_index // // 最终要旋转到哪一块
- var result_angle = [, , , , , , ]; //最终会旋转到下标的位置所需要的度数,从指针初始位置开始算度数,顺时针或逆时针
- var rand_circle = ; // 附加多转几圈,2-3
- this.click_flag = false; // 旋转结束前,不允许再次触发
- if (type == ) {
- // 转动盘子
- var rotate_angle =this.start_rotating_degree + rand_circle * +result_angle[result_index] - this.start_rotating_degree % ;
- this.start_rotating_degree = rotate_angle;
- this.rotate_angle = "rotate(" + rotate_angle + "deg)";
- var that = this;
- // 旋转结束后,允许再次触发
- setTimeout(function() {
- that.click_flag = true;
- that.game_over();
- }, during_time * + ); // 延时,保证转盘转完
- } else {
- //
- }
- }
js部分主要是转动停止的角度rotate_angle ,第一次是从0开始到一个角度,在这个角度的基础上到下一个角度,所以会减去上一个角度对圆的取余,这里面this.val是代表着奖品等级,result_index是对应的旋转到的角度,因为旋转是顺时针,所以角度的选择要逆时针的选取。转完调用that.game_over();函数来获取奖品count等级。
下面方法为处理奖品数据
旋转停下来时调用game_over()函数
- rotate_handle() {
- api.activityget(param).then(res => {
- if (res.status == || res.status == '') {
- this.item = res.data
- this.val = res.data.rewardLevel // 获取获奖等级
- this.rotating(); //开始旋转
- } else {
- this.$vux.alert.show({
- title: '提示',
- content: res.message,
- })
- }
- })
- }
下面是css部分,根据你的奖品等级和数量自动调整距离左边和顶部距离和转动角度。
- <style scoped>
- .wheel-main {
- display: flex;
- align-items: center;
- justify-content: center;
- position: relative;
- }
- .wheel-bg {
- width: 8rem;
- height: 8rem;
- background: url("../../../static/img/draw_wheel.png") no-repeat center top;
- background-size: %;
- color: #fff;
- font-weight: ;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-content: center;
- transition: transform 3s ease;
- }
- .wheel-pointer-box {
- position: absolute;
- top: %;
- left: %;
- z-index: ;
- transform: translate(-%, -%);
- }
- .wheel-pointer {
- width: .5rem;
- height:.2rem;
- background: url("../../../static/img/btn_start_n.png") no-repeat ;
- background-size: %;
- transform-origin: center %;
- }
- .wheel-bg div {
- text-align: center;
- }
- .prize-list {
- width: %;
- height: %;
- position: relative;
- }
- .prize-list .prize-item {
- position: absolute;
- top: ;
- left: ;
- z-index: ;
- }
- .prize-list .prize-item:first-child {
- top: .95rem;
- left: .9rem;
- transform: rotate(-20deg);
- }
- .prize-list .prize-item:nth-child() {
- top: .4rem;
- left: 5rem;
- transform: rotate(40deg);
- }
- .prize-list .prize-item:nth-child() {
- top: .2rem;
- left: .95rem;
- transform: rotate(-270deg);
- }
- .prize-list .prize-item:nth-child() {
- top: .08rem;
- left: .1rem;
- transform: rotate(-225deg);
- }
- .prize-list .prize-item:nth-child() {
- top: .8rem;
- left: .2rem;
- transform: rotate(-170deg);
- }
- .prize-list .prize-item:nth-child() {
- top: .7rem;
- left: .5rem;
- transform: rotate(-115deg);
- }
- .prize-list .prize-item:nth-child() .prize-type{
- font-size: .3rem;
- }
- .prize-list .prize-item:nth-child() {
- top: .4rem;
- left: .2rem;
- transform: rotate(-69deg);
- }
- .prize-list .prize-item:nth-child() img{
- width: .7rem;
- }
- .prize-list .prize-item:nth-child() {
- top: .1rem;
- left: .6rem;
- transform: rotate(-20deg);
- }
- .prize-pic img {
- width: .8rem;
- }
- .prize-count {
- font-size: .4rem;
- }
- .prize-type {
- font-size: 10px;
- }
- </style>
Vue 幸运大转盘的更多相关文章
- jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现
jQuery幸运大转盘_jQuery+PHP抽奖程序的简单实现 在线实例 查看演示 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- asp.net+jQueryRotate开发幸运大转盘
在线抽奖程序在很多网站上很多,抽奖形式多种多样,Flash抽奖偏多,本文将给大家介绍jQuery转盘抽奖,结合代码实例将使用jQuery和asp.net来实现转盘抽奖程序,为了便于理解,文章贴出实现源 ...
- PHP幸运大转盘源码,支持ThinkPHP
原理 先看图 可以看到1-6等奖都只有1个 ,7等奖有6个.指针默认指向上图位置,记为0°. 每个奖项对应不同的角度,圆的角度为360°,分成12块,所以每块为30°. 为了防止指针指着相邻两个将向之 ...
- html5简单拖拽实现自动左右贴边+幸运大转盘
此篇文章主要实现两个功能: 1.点击屏幕下方签到悬浮按钮: 2.弹出幸运大转盘,转盘抽奖签到 效果如图: 在网上找了很多移动端拖拽的js实现方式,大部分都是这一种,html5的touch事件,但是 ...
- PHP+AJAX开发幸运大转盘抽奖
PHP+AJAX开发幸运大转盘抽奖,通过奖品库存.中奖次数来计算中奖概率 奖品设置 $prizes = array( 0 => array( "id" => 0, // ...
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断
C#保留2位小数几种场景总结 场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.2 ...
- 跟我一起学编程—《Scratch编程》第24课:幸运大转盘
同学你好,欢迎来到<跟我一起学编程>,我是包老师.这是<Scratch3.0编程>课程的第24课,我这节课教你做一个抽奖游戏:幸运大转盘. 学习目标: 1. 能够熟练使用造型工 ...
- 幸运大转盘-jQuery+PHP实现的抽奖程序
目前好多网站上应用的转盘抽奖程序大多是基于flash的,而本文结合实例将使用jQuery和PHP来实现转盘抽奖程序,为了便于理解,作者分两部分来讲解,本文讲解第一部分,侧重使用jQuery实现转盘的转 ...
- WP8.1&Win10幸运大转盘源码分享
先AD一下我的群:Win10开发者群:53078485 最近在写一个APP,其中需要一个转盘动画的源码,找了很多但是都没有找到,无奈只好自己来写,写完效果自己还是比较满意的,分享出来,有需要的童鞋可以 ...
随机推荐
- python学习-while True语句
while True是不会跳出循环的. 在while中括号里为一个条件值,只有当条件为真的时候,会执行这条语句,直到条件为false的时候,则会跳出该循环语句.而在这里括号里的值为true,也就意味着 ...
- 你真的了解java序列化吗
问:可是我这个实体类,没有实现序列化那个接口,也能存到数据库,这是为什么呢? 想不通!我是用的注解和hibernate框架弄的! 难道说不实现序列化接口也能保存数据?不应该啊. @Entity pub ...
- 关于ESET占用CPU严重 的解决方案||ESET CPU 100%||用迅雷时ESET占用CPU(6月22日再次更新)
关于ESET占用CPU严重 的解决方案 本文根据原帖有适量删改. ESET 的杀毒软件历来以占用资源少,CPU消耗少著称,可是很多朋友(特别是中国大陆的朋友)反应ESS & EAV 间歇性占用 ...
- JdbcTemplate实现增删改查操作
JdbcTemplate介绍 为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架,Spring Boot Spring Data-JP ...
- 计算机网络(1)- TCP
TCP的全称是传输控制协议(Transmission Control Protocol)[RFC 793] TCP提供面向连接的服务.在传送数据之前必须先建立连接,数据传送结束后要释放连接.TCP不提 ...
- ApplicationContextAware使用理解
接口的作用 当一个类实现了这个接口(ApplicationContextAware)之后,Aware接口的Bean在被初始之后,可以取得一些相对应的资源,这个类可以直接获取spring 配置文件中 所 ...
- 6、pytest -- 临时目录和文件
目录 1. 相关的fixture 1.1. tmp_path 1.2. tmp_path_factory 1.3. tmpdir 1.4. tmpdir_factory 1.5. 区别 2. 默认的基 ...
- CentOS6.5下安装JDK1.7+MYSQL5.5+TOMCAT7+nginx1.7.5环境安装文档
----------------CentOS6.5下安装JDK1.7+MYSQL5.5+TOMCAT7+nginx1.7.5环境安装文档----------------------- [JDK1.7安 ...
- 暑期集训20190725 加法(add)
[题目描述] 数学课,黑板上写着n个数字,记为A1到An,fateice会重复以下操作若干次: 1. 选择两个奇偶性相同的整数Ai和Aj, 将他们擦去 2. 将Ai+Aj写在黑板上 问黑板上最终是否有 ...
- UVA12433 【Rent a Car】
这题应该算是比较难的一道网络流的题,(但却在我校OJ考试上出现了),但是大家只要能理解此图的建边方式就行. 假设有5天的租车需求,虚拟出2*n+2 即 12个节点,0为源点,12为汇点. 1,源点到1 ...