首页 > 其他分享 >带你用HTML+CSS+JS实现动态滚动骰子投掷效果!

带你用HTML+CSS+JS实现动态滚动骰子投掷效果!

时间:2024-11-08 10:47:09浏览次数:6  
标签:box flex 100px JS 1px HTML height border CSS

今天带大家用HTML+CSS+JS实现动态骰子投掷效果,下面来看看实现的效果:

点击开始投掷,骰子开始滚动。

点击停止投掷,骰子面会随机定在一个点数 

那么如何实现呢?请听我细细讲解:

一、骰子面的样式与布局

1、样式:

1、其中每一面大量的运用了flex布局来实现了骰面上圆点的位置。

2、每一面都用了 transform: rotateY(xxxdeg) translateZ(xxxpx),用于调整面与面的位置,以组合成一个3D的视觉效果。

3、move动画实现了骰子翻滚的效果。

<style>
        @keyframes move {
            from {
                transform: rotateY(0deg) rotateZ(0deg);
            }

            to {
                transform: rotateY(360deg) rotateZ(360deg);
            }
        }


        main {
            margin: 120px auto;
            width: 100px;
            height: 100px;
            transform-style: preserve-3d;
            transform: rotateY(360deg) rotateZ(360deg);
        }

        .demainplay {
            margin: 120px auto;
            width: 100px;
            height: 100px;
            display: flex;
            transform-style: preserve-3d;
            animation: move 1s linear infinite;
        }

        .tran {
            transform: rotateY(-180deg) translateZ(-50px)
        }


        .demainplay1 {
            margin: 120px auto;
            width: 600px;
            height: 100px;
            display: flex;
        }

        .one,
        .two,
        .three,
        .four,
        .five,
        .six {
            border-radius: 5px;
            position: absolute;
            background-color: rgb(255, 255, 255);
            border: 1px solid rgb(232, 232, 232) !important;
            box-shadow: 1px 1px 5px 5px rgb(237, 236, 236) inset;
        }



        .one {
            width: 100px;
            height: 100px;
            border: 1px solid;
            display: flex;
            justify-content: center;
            align-items: center;
            transform: translateZ(50px);
        }

        .two {
            width: 100px;
            height: 100px;
            border: 1px solid;
            display: flex;
            flex-grow: 1;
            flex-shrink: 1;
            flex-direction: column;
            justify-content: space-around;
            align-items: center;
            transform: rotateY(90deg) translateZ(50px);
        }

        .three {
            width: 100px;
            height: 100px;
            border: 1px solid;
            display: flex;
            flex-direction: column;
            justify-content: space-around;
            /* align-items: center; */
            padding: 5px 5px;
            box-sizing: border-box;
            transform: rotateY(270deg) translateZ(50px);
        }

        .four {
            box-sizing: border-box;
            padding-left: 5px;
            padding-right: 5px;
            width: 100px;
            height: 100px;
            border: 1px solid;
            display: flex;
            justify-content: space-around;
            flex-wrap: wrap;
            align-items: center;
            transform: rotateY(180deg) translateZ(50px);
        }

        .five {
            box-sizing: border-box;
            padding-top: 10px;
            padding-bottom: 10px;
            width: 100px;
            height: 100px;
            border: 1px solid;
            display: flex;
            justify-content: space-around;
            flex-wrap: wrap;
            transform: rotateX(90deg) translateZ(50px);
        }

        .six {
            width: 100px;
            height: 100px;
            border: 1px solid;
            display: flex;
            flex-direction: column;
            justify-content: space-around;
            flex-wrap: wrap;
            padding-left: 4px;
            padding-right: 4px;
            box-sizing: border-box;
            transform: rotateX(270deg) rotateY(0deg) translateZ(50px);
        }


        .thround1 {
            height: 30px;
            width: 30px;
            background-color: red;
            border-radius: 50%;
            box-shadow: 0px 2px 5px 1px rgb(160, 5, 5) inset;
        }

        .thround2 {
            height: 30px;
            width: 30px;
            background-color: red;
            border-radius: 50%;
            align-self: center;
            box-shadow: 0px 2px 5px 1px rgb(160, 5, 5) inset;
        }

        .thround3 {
            height: 30px;
            width: 30px;
            background-color: red;
            border-radius: 50%;
            align-self: flex-end;
            box-shadow: 0px 2px 5px 1px rgb(160, 5, 5) inset;
        }

       

        .round1 {
            height: 27px;
            width: 27px;
            background-color: red;
            border-radius: 50%;
            box-shadow: 0px 2px 5px 1px rgb(160, 5, 5) inset;
        }

        .round2 {
            height: 27px;
            width: 27px;
            background-color: red;
            border-radius: 50%;
            margin-left: 10px;
            box-shadow: 0px 2px 5px 1px rgb(160, 5, 5) inset;
        }

        .deround {
            height: 27px;
            width: 27px;
            background-color: red;
            border-radius: 50%;
            margin-left: 30px;
            margin-right: 30px;
            box-shadow: 0px 2px 5px 1px rgb(160, 5, 5) inset;
        }

        .round {
            height: 30px;
            width: 30px;
            background-color: red;
            border-radius: 50%;
            box-shadow: 0px 2px 5px 1px rgb(160, 5, 5) inset;
        }

        button {
            width: 100px;
            height: 40px;
            display: block;
            border-radius: 10px;
            margin: auto;
            margin-top: 20px;
            background-color: rgb(255, 125, 50);
            border: none;
            color: rgb(255, 255, 255);
            font-size: 18px;
            transition: 0.3s;
        }

        button:hover{
            color:rgb(255, 125, 50) ;
            background-color: rgb(255, 255, 255);
            border: 1px solid;
            box-shadow: 2px 5px 5px 1px rgb(255, 196, 145);
        }

        .hide {
            display: none;
        }

        .show {
            display: flex;
            transform: rotateY(-180deg)
        }
    </style>

2、HTML结构

<main>
        <div class="one hide show">
            <div class="round"></div>
        </div>

        <div class="two hide show">
            <div class="round"></div>
            <div class="round"></div>
        </div>

        <div class="three hide show">
            <div class="thround1"></div>
            <div class="thround2"></div>
            <div class="thround3"></div>
        </div>

        <div class="four hide show">
            <div class="round"></div>
            <div class="round"></div>
            <div class="round"></div>
            <div class="round"></div>
        </div>

        <div class="five hide show">
            <div class="round1"></div>
            <div class="round1"></div>
            <div class="deround"></div>
            <div class="round1"></div>
            <div class="round1"></div>
        </div>

        <div class="six hide show">
            <div class="round2"></div>
            <div class="round2"></div>
            <div class="round2"></div>
            <div class="round2"></div>
            <div class="round2"></div>
            <div class="round2"></div>
        </div>
    </main>


    <button>开始投掷</button>
    <button>停止投掷</button>

二、骰子JS的实现

  <script>
        var mainplay = document.querySelectorAll('button')
        var deplay = document.querySelector('main')
        var tou = document.querySelectorAll('main>div')
        mainplay[0].onclick = function () {
            for (var i = 0; i < tou.length; i++) {
                tou[i].classList.remove('hide')
                tou[i].classList.remove('show')
            }
            deplay.classList.add('demainplay')
        }
        mainplay[1].onclick = function () {
            deplay.classList.remove('demainplay')
            for (var i = 0; i < tou.length; i++) {
                tou[i].classList.add('hide')
            }
            var ran = Math.floor(Math.random() * 6)
            tou[ran].classList.add('show')
        }
    </script>

标签:box,flex,100px,JS,1px,HTML,height,border,CSS
From: https://blog.csdn.net/xiaolouuuu/article/details/143616179

相关文章

  • PHP与Vue.js结合,开发现代Web应用的前后端分离
    随着前端技术的迅猛发展,前后端分离已成为现代Web应用开发的重要趋势。在这个架构中,PHP作为后端语言,配合Vue.js这样的前端框架,可以有效提高开发效率和用户体验。PHP与Vue.js的结合,使得开发者能够专注于各自领域的专业技术,形成高效、灵活的开发模式。PHP作为一种成熟的后端开发语言......
  • DevExpress JS & ASP.NET Core v24.1亮点 - 支持DateOnly/TimeOnly类型
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......
  • HTML的基础标签
    01-基础标签01-基础标签1.认识HTML2.网页基础知识3.认识标签meta标签div标签H系列标题标签排序标签p段落标签span标签a标签--超链接a标签--锚点img标签其他常用标签4.特殊符号5.语义化√.作业与练习1.认识HTMLHTML是HyperTextMarkupLanguage(超文本标记语言)......
  • HTML5的文本样式
    HTML5的文本样式文本样式 1文字样式   1字体颜色color   2字体大小font-size:px   3字体粗细font-weight:px     范围100到900之间     bold[粗] bolder[加粗] 2字体效果   1字体效......
  • (附项目源码)Java开发语言,基于HTML5的智慧养老服务平台的设计与实现 46,计算机毕设程序开
    摘 要随着社会老龄化程度的不断加深,智慧养老发展成为当今社会关注的焦点之一。家庭与社区资源的有限性,使得需要提供更加便捷、贴心的养老服务来满足老年人的需求。基于HTML5技术的智慧养老服务平台的设计和实现,为老年人提供了一个全新的智慧养老服务方式,便于家属和管理员......
  • 基于springboot+vue.js+uniapp小程序的计算机学习系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 基于springboot+vue.js+uniapp小程序的it职业生涯规划系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 基于springboot+vue.js+uniapp小程序的疫情网课管理系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 基于springboot+vue.js+uniapp小程序的湖南交通工程学院学生就业信息系统附带文章源码
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • css基础知识
    css基础知识css基础知识1.认识css概念写在哪如何写2.选择器初级id与class命名选择器分类(初级版)选择器权重3.基础知识介绍1.认识css概念CSS(英文全称:CascadingStyleSheets),层叠样式表。它是网页的装饰者,用来修饰各标签排版(大小、边距、背景、位置等)、改变字体的样式(......