html+css+js实现转盘抽奖

2023-11-02

 

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>转盘</title>
<style>
    .zp {
        position: relative;
        border-radius: 100%;
        width: 300px;
        overflow: hidden;
        margin:0 auto;
    }
    .zp-panel {
        background: url(./assets/dial.png) no-repeat center center;
        background-size: 100%;
        width: 300px;
        height: 300px;
        position: relative;
        transform: rotate(25deg);
        transition: transform 3s ease-out;
        
    }
    .item {
        font-size: 12px;
        position: absolute;
        top: 50%;
        left: 0;
        right: 0;
        text-align: center;
        margin-top: -7px;
        line-height: 1;
    }
    .btn {
        position: absolute;
        background-color: green;
        width: 80px;
        height: 80px;
        border-radius: 100%;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        z-index: 2;
        display: flex;
        align-items: center;
        justify-content: center;
        color: #fff;
    }
    .btn:after {
        content: '';
        position: absolute;
        height: 80px;
        width: 4px;
        background-color: green;
        left: 38px;
        bottom: 60px;
    }
</style>

</head>
<body>
    <div class="zp">
        <div class="zp-panel"></div>
        <div class="btn">开始</div>
    </div>
</body>
<script>
    const arr = [
        {name: ''},
        {name: ''},
        {name: ''},
        {name: ''},
        {name: ''},
        {name: ''},
        {name: ''},
        {name: ''}
    ]
    const zp = document.querySelector('.zp-panel')
    const btn = document.querySelector('.btn')
    const d = 360 / arr.length
    zp.innerHTML = arr.map((v, i) => {
        // console.log(v, i);
        return `<div class="item" 
            style="transform:rotate(${i*d}deg) translate(75px)">${v.name}</div>`
    }).join('')
    btn.onclick = () => {
        // const zpIndex = arr.findIndex(v => v.is)
        const zpIndex = Math.random()*8
        console.log(zpIndex);
        const deg = zpIndex * d + Math.random()*180
        console.log(deg);
        // 清空上次抽奖,暂停动画效果
        zp.style.transition = 'inherit'
        zp.style.transform = ''
        setTimeout(() => {
            // 重置transition,恢复动画效果
            zp.style.transition = ''
            setTimeout(() => {
                // 触发动画
                zp.style.transform  = `rotate(${deg}deg)`
            })
        })
    }
</script>
</html>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

html+css+js实现转盘抽奖 的相关文章

  • 如何将大于整个页面 100% 的元素居中对齐?

    我有一个宽度为 100 的 div 并且隐藏了一个宽度为 3000px 的 div 我希望3000px的div左右均匀地被切断 我会使用背景位置 中心 然而 事情比这更复杂 3000px div 包含 30 100px div 我尝试过在
  • 为什么网格项目不居中?

    由于某种原因 两个输入范围使网格中的前两项偏离中心 我假设这是因为它们的影子 DOM 样式 事实真的是这样吗 有谁知道为什么范围使项目 A 和 B 偏离中心 这是一个代码笔 https codepen io tOkyO1 pen QOeKL
  • 实现悬停信息框

    我有一个日历 当用户将鼠标悬停在单元格上时 会出现一个很大的信息框 其中包含该日期的详细信息 虽然当用户离开时使信息框消失 但我遇到了一些麻烦 我基本上想要它 这样当鼠标光标移出信息框隐藏的日历单元格时 它就会消失 但我遇到了麻烦 因为mo
  • 如何强制折断不可折断的字符串?

    我有一个根据数据库中包含的数据生成的 HTML 页面 数据库有时包含浏览器无法分解的长字符串 因为这些字符串不包含可分解的字符 空格 点 逗号等 有没有办法使用 html css 甚至 javascript 来解决这个问题 看到这个link
  • 使用命名的成功/错误回调在 AngularJS 中声明一个 Promise

    我正在尝试做一些与 http 服务非常相似的事情 根据我的理解 http 返回一个 Promise 对象 使用它时 语法是 http success function data success callback error function
  • 在按钮之间添加空间?

    嗨 我这里有一个代码 除了一件事之外 一切都很完美 代码中每个按钮之间没有空格 我尝试过 margin 但不幸的是它是一个无序列表 所以我有点困惑 我将添加或替换什么以在两个按钮之间留出空间 帮助
  • 如何在php中使用一张图像绘制形状

    我需要使用图像的一部分来创建帧图像 例如 用户将从后端上传图像片段 现在我需要根据前端用户的要求在前端创建一个框架 用户将选择框架的高度和宽度 然后他将选择该图像片段 如下所示 我没有办法做到这一点 我尝试通过 css 和 html can
  • 游戏手柄 JavaScript 未能按预期更新

    我正在尝试让浏览器报告我的 XBOX 控制器的状态 然而 在第一次按下按钮后 它似乎变得 卡住 我究竟做错了什么
  • html canvas动画卡顿

    谁能解释为什么提供的画布动画断断续续 我创建了一个测试存根来演示该问题 我在桌面上的 FF Chrome IE 以及 Android 上的 FF 和 Chrome 中看到了卡顿现象 口吃是由于垃圾收集造成的吗 似乎 raf 在每次调用时都会
  • 将异步事件监听器与 Nestjs EventEmitter 模块和无服务器函数结合使用

    我正在尝试在 Nestjs EventEmitter 模块的帮助下实现具有无服务器 lambda 函数的异步工作线程 处理程序在发出事件时被调用 但该函数在 async await 调用之前关闭 我尝试过同时使用emit and emitA
  • 如何防止弹性项目高度因其内容而溢出[重复]

    这个问题在这里已经有答案了 我刚刚开始学习 Flex 到目前为止我印象深刻 但是 我对包含页眉 页脚和三列的全页应用程序遇到了问题 第一列包含一个项目列表 由于我无法为其父级设置固定高度 因此每次列表增长时 它都会将页脚向下推 这是一个带有
  • Rails:找不到 JavaScript 运行时。有关可用运行时的列表,请参阅 https://github.com/sstephenson/execjs。 (ExecJS::运行时不可用)

    自从几周前 Dreamhost 升级了服务器以来 我的网站就被破坏了 我一直在努力解决它并取得了一些进展 但我仍然坚持希望是最后的问题 我在 Ruby 1 8 7 上使用 Rails 3 1 1 并收到来自 PhusionPassenger
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK
  • CSS - div 与父 div 底部对齐(内联块)

    我知道这个 html 很草率 有一些不必要的额外 div 但无论如何 我无法理解为什么 ID 为 info box right 的 div 与父 div 的底部对齐 您可以看到 文本 与下面的 jsfiddle 示例的底部 有什么想法可以让
  • 如何为 TBODY 应用垂直滚动条

    我的表中有 4 列和 5 行数据 我必须为 TBODY 应用垂直滚动条 TH 标题内容不应滚动 我对场景进行了编码 并且在我将滚动类应用于 TBODY 之前它工作正常 一旦我将滚动样式类应用于 TBODY 它就会破坏之前的对齐方式 任何人都
  • Aurelia - 仅 HTML 自定义元素的内联定义

    我的 Aurelia 视图模型中有一个递归对象 如下所示 Class BottomlessPit Name string MorePits BottomlessPit null 因此 我想在 Aurelia 视图中使用递归模板 它只会在一个
  • 在 Bootstrap 中使用 CakePHP 时如何修改包装器 div 错误类

    我在用着Bootstrap 3 0RC1 with CakePHP 2 3 6 尝试利用那些漂亮的课程 例如has error and has warning for 验证状态 http getbootstrap com css forms
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • 如何为 Imagus 悬停缩放扩展开发自定义过滤器?

    当我读到关于悬停缩放是邪恶的 http www reddit com r YouShouldKnow comments 1wjrc8 ysk that the hover zoom extension is spyware 哎呀 有两篇文章
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库

随机推荐

  • vue3使用高德地图api,海量点,多边形围栏,热力图,轨迹线(二)

    五 MassMarks海量点标记 let mass 此处我定义了6种海量点图标 此处url我用的是项目中本地引入的图片 也可以填在线url链接 props infoList是项目后端返回的所有点的信息数组 其中每个点对象有个style字段
  • ArcGIS Pro 一打开Notebook笔记本工具软件就崩溃(停止运行)

    先说结论 如果对于ArcGIS Pro的笔记本工具 包括新建 添加 打开等一切操作 只要一点开 ArcGIS Pro就停止运行 一个可能的原因是Temp文件夹或者是其他文件的路径中有中文 可以尝试将路径修改为全英文 再次运行 其实这个问题是
  • 程序员的自我修养--链接、装载与库笔记:可执行文件的装载与进程

    可执行文件只有装载到内存以后才能被CPU执行 1 进程虚拟地址空间 程序和进程有什么区别 程序 或者狭义上讲可执行文件 是一个静态的概念 它就是一些预先编译好的指令和数据集合的一个文件 进程则是一个动态的概念 它是程序运行时的一个过程 很多
  • centos开放端口号的常用命令

    1 开放端口 firewall cmd zone public add port 5672 tcp permanent 开放5672端口 firewall cmd zone public remove port 5672 tcp perma
  • spring cloud项目升级spring boot 2.0爬过的坑

    注 升级后spring boot为2 0版本 spring cloud为Finchley M8版本 2 0官方文档地址 https docs spring io spring boot docs current reference html
  • 活动报名丨LLaMA一作:如何构建开源高效的基础语言模型(智源Live 38期)

    4月26日 星期三 下午16 00 17 30 智源LIVE 第38期 线上活动上 Meta AI研究科学家 LLaMA一作Hugo Touvron将分享 LLaMA Open and Efficient Foundation Langua
  • DOM4J对SOAP的返回信息解析

    用DOM4J的XML解析式拿不到节点的 所以网上利用DOM4J提供的VisitorSupport解决此问题 不废话 直接看代码 package com starhub util import org dom4j Document impor
  • 7个超好用的测试框架(总有一款适合你)

    昨天吃饭的时候和同事聊到测试框架 于是决定根据自己的实战工作经验总结一波好用的测试框架 本来文章里一共11个的 最后想想还是剔除掉了Maxim Cypress Gauge和ZTF Zentao Testing Framework 工具在精而
  • 【Python系列】eval 函数

    文章目录 1 基本概念 2 使用举例 3 eval 函数运用 计算器 4 不要滥用 eval 1 基本概念 eval 是 python 中功能非常强大的一个函数 将字符串当成有效的表达式来求值 并返回计算结果 所谓表达式就是 eval 这个
  • PyTorch深度学习实战(9)——学习率优化

    PyTorch深度学习实战 9 学习率优化 0 前言 1 学习率简介 2 梯度值 学习率和权重之间的相互作用 3 学习率优化实战 3 1 学习率对缩放后的数据集的影响 3 2 学习率对未缩放数据集的影响 小结 系列链接 0 前言 学习率 l
  • C++中的堆和栈

    堆栈其实是两种数据结构 堆栈都是一种数据项按序排列的数据结构 只能在一端 称为栈顶 top 对数据项进行插入和删除 要点 堆 顺序随意 栈 后进先出 Last In First Out 堆和栈的区别 一 预备知识 程序的内存分配 一个由C
  • 开源软件推介

    ag Grid 是一个企业级的 JavaScript 数据网格 ag Grid 的目的是提供可用于构建企业级应用的表格 例如报告和数据分析 业务流程和数据输入的数据表格 ag Grid 每一个功能的文档至少有一个例子来展示该功能 功能特性
  • 【工具类】double

    默认除法运算精度 private static final int DEF DIV SCALE 10 默认的保留位数 private static DecimalFormat df new DecimalFormat 0 00 提供精确的加
  • 怎么停止和重新启用hadoop的DataNode

    停止 比如我原来有10个节点的集群 现在我想停掉2个 但数据不能丢失 只能让它们的数据转移到其它8台上 这道过程就是decommission 我们不能直接把那2台停掉 要在停掉之前把数据转移出去 首先建立一个excludes文件 它是一个文
  • 如何在cmd环境中激活TensorFlow的环境

    一 如何安装TensorFlow环境 1 首先要安装好Anaconda 然后在cmd中检查cond的版本 2 要安装TensorFlow 在cmd终端输入 conda create name tensorflow python 3 5 2
  • 什么是 Dynamics 365

    什么是Dynamics 365 Dynamics 365是一组智能业务应用程序 通过预测性的 AI 驱动型见解 帮助您开展整体业务并实现更出色的成果 将潜在客户转化为忠实客户 培养更多销售就绪型潜在顾客 实现购买体验的个性化 大规模建立客户
  • onnx模型裁剪一部分

    https github com onnx onnx blob main docs PythonAPIOverview md import onnx input path path to the original model onnx ou
  • 交换机和路由器各自实现的原理

    1 什么是交换机 交换机也叫交换式集线器 它通过对信息进行重新生成 并经过内部处理后转发至指定端口 具备自动寻址能力和交换作用 由于交换机根据所传递信息包的目的地址 将每一信息包独立地从源端口送至目的端口 避免了和其他端口发生碰撞 广义的交
  • java日志脱敏(密码/身份证/其他自定义等)

    一 脱敏规则类 import ch qos logback classic pattern MessageConverter import ch qos logback classic spi ILoggingEvent import or
  • html+css+js实现转盘抽奖