canvas转盘-拯救选择困难

转盘-拯救选择困难

    • 效果图
    • 简介
    • 代码

效果图

在这里插入图片描述

简介

每到饭点就纠结吃什么,不如直接roll点。

  1. 词条框中输入选项,选项用逗号(中英都可)隔开。
  2. 点击设置词条,会根据词条(没有输入则获取代码中的默认词条)绘制等比例扇形图。
  3. 点击start 开始旋转,根据旋转角度计算结果,旋转角度以及旋转时间是完全随机的,有时会很快有时会很慢。

注意:选项不宜过多,虽然对功能没影响,不过文本会显示不开。另外可以将文件传到手机随身携带,没有过多的脚本,大部分浏览器兼容

代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>转盘</title><style>.base{width: 400px;margin: 20px auto;}.wrap {position: relative;width: 400px;height: 400px;}#cv {position: relative;border-radius: 100%;border: 1px solid #f4f4f4;box-shadow: 8px 5px 10px 2px #ddd;}.pointer {position: absolute;width: 100%;height: 100%;left: 0;top: 0;}.pointer-center,.pointer-line {position: absolute;border: 1px solid #ddd;background: #fff;}.pointer-center {left: 0;right: 0;top: 0;bottom: 0;margin: auto;width: 20px;height: 20px;border-radius: 100%;}.pointer-line {left: 0;right: 0;top: calc(33% + 17px);bottom: 0;margin: auto;width: 8px;height: 33%;border-radius: 0 0 4px 4px/0 0 50% 50%;border-top: 0;}.handle {display: block;width: auto;height: 30px;padding: 3px 10px;margin: 20px auto 0;line-height: 30px;font-size: 20px;font-weight: bold;color: #F44336;text-align: center;cursor: pointer;border: 1px solid #D0D0D0;border-radius: 3px;}.handle:hover {color: mediumseagreen;}#custom {width: 400px;height: 100px;margin-top: 20px;border-radius: 3px;padding: 2px;outline: none;border: 1px solid #D0D0D0;}</style>
</head>
<body>
<div class="base"><div class="wrap"><canvas id="cv" width="400px" height="400px"></canvas><div class="pointer"><i class="pointer-center"></i><i class="pointer-line"></i></div></div><span class="handle" id="start">start</span><textarea type="text" id="custom"></textarea><div class="handle" id="setting">设置词条</div><div style="font-size: 14px;text-align: center">设置转盘选项,不输入则添加默认值</div><div class="handle" id="see" style="height:auto">查看词条</div>
</div>
<script>var defaultStr = '选项1,选项2,选项3,选项4,选项5';var colors = ['#92dfff', '#ffb884', '#b5ff80', '#f7ff45'];var setting = document.getElementById('setting'),custom = document.getElementById('custom'),see = document.getElementById('see');setting.addEventListener('click', function () {render(custom.value)});see.addEventListener('click',function(){this.innerHTML=defaultStr.split(/,|,/).join('<br>');});function render(str) {var itemStr = str || defaultStr;var items = itemStr.split(/,|,/).map(function (item) {return {label: item}});var len_items = items.length, len_colors = colors.length;//len_items % len_colors < len_colors 多出的items 部分从颜色盘的顺位取色避免相邻重色//计算开始顺位索引var ondex = len_items - len_items % len_colors;//匹配颜色var i;for (i = 0; i < ondex; i++) {items[i].color = colors[i % len_colors];}for (; i < items.length; i++) {items[i].color = colors[i % len_colors + 1];}var drawing, start, context, cx, cy;//创建画布document.querySelector('.wrap').innerHTML = document.querySelector('.wrap').innerHTML;drawing = document.getElementById('cv');start = document.getElementById('start');context = drawing.getContext("2d");cx = drawing.width / 2;cy = drawing.height / 2;//绘制var per = 2 * Math.PI / items.length;//各扇区角度var startAngle = 0.5 * Math.PI, endAngle = startAngle + per;//初始角度//重置中心点context.translate(cx, cy);items.forEach(function (item) {context.beginPath();context.moveTo(0, 0);//中心点context.lineTo(0, cy);//正方向context.arc(0, 0, cy, startAngle, endAngle);context.lineTo(0, 0);context.fillStyle = item.color;context.fill();context.closePath();//绘制文字context.rotate(0.5 * per);context.font = '400 12px Arial';context.textAlign = 'center';context.fillStyle = '#000';context.fillText(item.label, 0, cy * 0.8);//旋转画板context.rotate(0.5 * per);});start.addEventListener('click', function () {var angle, time;//随机旋转角度angle = parseInt(Math.random() * 8000);time = 4 + angle / 360 * 0.5;drawing.style = 'transform:rotate(0deg);transition:none';setTimeout(function () {drawing.style = 'transform:rotate(' + angle + 'deg);transition:transform ' + time + 's cubic-bezier(0.15, 0.72, 0.25, 1) 0s';//计算旋转角度相对于初始角度偏角占360度的比例setTimeout(function () {var anglePer, rollNum,result;anglePer = angle % 360 / 360;//旋转过的面板数(注意是逆向旋转)rollNum = Math.ceil(anglePer / (1 / len_items));result = items[len_items - rollNum].label;//输出结果console.log(result);alert(result);}, time * 1000)})})}</script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tcping计算机端口,TCPing 服务器端口测试,端口阻断检测

介绍平时我们Ping服务器的IP&#xff0c;只是ICMP协议传输获得的延迟&#xff0c;而某些IDC会把ICMP的延迟优化的很棒&#xff0c;实际上一走TCPing 就暴露了;而且我们使用过程中主要是TCP协议传输数据&#xff0c;所以可以测试一下TCPing得到的延迟;另外因为TCP协议的握手步骤…

ue4中在物体上加ui_UE4 物体位置同步相关源码分析浅谈

前言多图, 不想在源代码写注释, 不想贴代码块, 看的不清楚版本4.21混4.22, 区别不大文章属于旧有文章搬运, 之前在csdn上面2019.10.27修改一版物体位置信息同步, 或者说物体的移动同步, 是一个很大的坑, 从个人目前魔改UE4位置同步后, 感觉至少要考虑以下几点位置信息的数据结构…

计算占比并保证百分比和为1

计算占比并保证百分比和为1常用场景代码常用场景 用于动态计算页面元素的百分比占比可视化中扇形统计图的显示数值修正 代码 /*** 计算数组中各项的占比&#xff0c;保证百分比和等于1* param arr 需要计算百分比的数组,传入时必须降序排序* param precision 精度 比如 4 …

tomcat配置自动服务器地址,修改eclipse部署tomcat时服务器部署地址

有时候我们在eclipse部署web项目至本地的tomcat但在webapps中找不到一、发现问题在eclipse中新建Dynamic Web Project&#xff0c;配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并没有出现所建立的工程名字。二、验证很明显项目…

linux ns级定时器_linux用户空间获得ns纳秒级时间示例

一、引言我们在测试程序的性能的时候往往需要获得ns级的精确时间去衡量一个程序的性能&#xff0c;下面介绍下linux中用户空间获得ns级时间的方法二、用户空间获得ns级时间使用clock_gettime函数&#xff0c;函数原型如下&#xff1a;long sys_clock_gettime (clockid_t which_…

Prime算法生成迷宫

prime迷宫生成结果展示算法解析实现代码结果展示 算法解析 参考链接 Prime迷宫生成算法的原理&#xff1a; (1)初始地图所有位置均设为墙 (2)任意插入一个墙体进墙队列 (3)判断此时墙体是否可以设置为路(判断依据在于上下左右四个位置是否只有一个位置是路) (4)若设置为路&…

wifi密码公式计算机,求一些高数公式,做wifi密码用?

满意答案thyk72832018.06.08采纳率&#xff1a;55% 等级&#xff1a;13已帮助&#xff1a;8612人1)∫kdxkxc2)∫x^udx(x^(u1))/(u c3)∫1/xdxln|x|c4) ∫a^xdx(a^x)/lnac5)∫e^xdxe^xc6)∫sinxdx-cosxc7)∫cosxdxsinxc8)∫1/(cosx)^2dxtanxc9)∫1/(sinx)^2dx-cotxc10)∫1/√…

canvas简单五子棋

canvas简单五子棋效果思路代码效果 思路 canvans 绘制棋盘&#xff0c;绘制时候边缘预留棋子位置监听点击事件绘制落子并记录到字典中获胜判定&#xff0c;在四个方向上检测是否有足够数量的连贯棋子 代码 <!DOCTYPE html> <html lang"en"> <head…

unet作为服务器不显示画面,UNet:无法生成服务器对象(不使用NetworkManager)

我m playing around with Unity 5的网络HLAPI . I dont want to use the NetworkManager &#xff0c;因为我没有t want to pay for Unity的多人游戏服务(Matchmaker和Relay服务器) .当客户端连接到服务器时&#xff0c;我正在尝试在客户端上生成播放器 . 我可以让客户端正确连…

viewBox视图缩放(1)

文章目录前言一、案例解析前言 svg 的viewBox 可以重新定义视口的显示范围&#xff0c;通常表现为平移&#xff0c;缩放内容&#xff0c;之前测试的一直是viewBox 和viewPort 之间的等比缩放&#xff0c;后来发现不等比情况与认知有些出入&#xff0c;如下 <svg width&quo…

sklearn svm如何选择核函数_文本挖掘篇|利用SVM进行短文本分类

何为数据挖掘&#xff0c;顾名思义就是从大量数据中挖掘或抽取出知识。在实际中&#xff0c;进行数据挖掘的数据不仅仅有数值型数据&#xff0c;还有图片型数据&#xff0c;文本型数据等。而所谓文本挖掘&#xff0c;就是从大量文本数据中&#xff0c;提取出对信息使用者有价值…

svg 折线添加新的折点

问题 现有已知折线 有多段&#xff0c;当双击折线的时候&#xff0c;需要将该双击的位置点Q 添加到折线上&#xff08;排除端点情况&#xff09;&#xff0c;如何去判断Q要添加在折线的哪一段&#xff0c;或者Q分割了折线的哪一段&#xff1f;&#xff1f; 分析 方式1 一开始…

微信企业号已停止提供企业消息会话服务器,企业微信注册时显示会话服务已经被安装了怎么解决 解决攻略教程大全...

2016年4月18日&#xff0c;腾讯正式发布全平台企业办公工具“企业微信”&#xff0c;并通过腾讯应用宝独家首发安卓版。“企业微信”的推出将为企业员工提供最基础和最实用的办公服务&#xff0c;并加入贴合办公场景的特色功能、轻OA工具&#xff0c;合理化区分工作与生活&…

hashmap 扩容是元素还是数组_曹工说JDK源码(1)--ConcurrentHashMap,扩容前大家同在一个哈希桶,为啥扩容后,你去新数组的高位,我只能去低位?...

如何计算&#xff0c;一对key/value应该放在哪个哈希桶大家都知道&#xff0c;hashmap底层是数组链表(不讨论红黑树的情况)&#xff0c;其中&#xff0c;这个数组&#xff0c;我们一般叫做哈希桶&#xff0c;大家如果去看jdk的源码&#xff0c;会发现里面有一些变量&#xff0c…

ftp服务器文件名存在,有什么办法根据已知文件名来检测FTP服务器上是否存在该文件? 急...

蛊毒传说我不敢说_________________using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.IO;namespace test{ class Program { static void Main(string[] args) { string path "ftp://192.168.1.200/ser…

A* 寻路 +寻路演示(js)

效果 每个单元格内文字&#xff1a; (F) (Price) (G) (H) 原理 原理是参考另一篇csdn博文&#xff0c;不过忘记收藏找不到了 初始化 open_set和 close_set。将 起点 加入open_set中&#xff0c;并设置优先级为0&#xff08;优先级最高&#xff09;。如果open_set不为空&…

pc端无法ping android模拟器_【内附下载方式】PC端最新宝可梦 Lets Go去皮去伊模拟器+最新dlc+mod...

游戏名称&#xff1a;精灵宝可梦 Let‘s go 皮卡丘 伊布游戏总大小&#xff1a;9GB游戏简介&#xff1a;《精灵宝可梦 Lets Go 皮卡丘/伊布》是宝可梦系列全新作品&#xff0c;也是该系列首次登上Switch主机&#xff0c;为后续作品的开发奠定了基础。本作可以视为是对第一世代红…

自定义处理网页选区字符并实时显示(js)

概述 浏览网页的时候&#xff0c;可能需要去数一下某段文字的字符数量&#xff0c;或者需要对选中内容做些实时翻译&#xff0c;比如进制的转化&#xff0c;可以使用脚本做个简单的实时翻译。 效果 选中内容&#xff0c;并且鼠标移动时会在左下角显示翻译后的结果。示例为翻…

css文本行高是哪个属性_CSS中的line-height行高属性的使用技巧小结

CSS中的line-hight属性是用来控制文本行之间的空隙的。它一般情况下没有单位的设定(如&#xff1a;line-height:1.4;)所以这是一个按字体尺寸的比例来计算。这对印刷版来说是一个很重要的属性。线条过低就会挤在一起&#xff0c;线条过高就会相距甚远&#xff0c;这两种情况都会…

模2运算及模2运算式计算 (js)

概述 学习二维码生成的时候卡在纠错码部分&#xff0c;然后就接触到了伽罗华域&#xff0c;了解到模2运算&#xff0c;恰好前不久刚了解了波兰表达式&#xff0c;就尝试写一个支持模2运算的算式解析计算。 结果 10011*101101.M2Calc() >"1011010" 涉及内容 模…