bootstrap实现天平效果

之前提到了,最近,孩子的幼儿园让家长体验“半日助教活动”,每个家长需要讲授15-20分钟的课程。作为一名程序员,实在没有能教的课程,只能做了一个小游戏,带着小朋友们熟悉数字。

在上一章博客中,笔者发布了九宫格中猫捉老鼠的小游戏源码,下面再把通过bootstrap实现天平效果的源码发布,供读者参考。

效果大致是这样的。通过前端代码生成一个简易的天平,天平两边分别随机生成一个数字,点击较大的数字天平就会倾斜。

天平两边生成随机数的截图:

点击较大数字天平倾斜的截图:

废话不多说,直接上源码。

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <!-- 引入bootstrap -->
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"> 
    <link rel="stylesheet" href="./css/d2g.css">
    <title>跷跷板比大小</title>
</head>
<body>
	<div id="imgInfo">跷跷板比大小</div>
    <!-- 跷跷板 -->
    <div class="jenga-container">
      <div class="jenga-block" id="block1"></div>
	  <div class="line" id="line"></div>
	  <div class="sjx" id="sjx"></div>
      <div class="jenga-block" id="block2"></div>
    </div>
</body>
<!-- 引入js文件 -->
<script src="./js/d2g.js"></script>
</html>

html代码没什么好说的,就是两个方块儿,中间用横线连接,横线下面再放一个三角形作为支点。

css:

#imgInfo{
	width: 100%;
    margin-top: 20px;
    text-align: center;
	color: blue;
}
#line {
  height: 2px; /* 设置为最大高度 */
  background-color: #000;
  position: absolute;
  transform-origin: top; 
  transition: transform 0.8s ease-out;
}
#sjx {
  width: 100px;
  height: 100px; /* 设置为最大高度 */
  background-image: url('../img/sjx1.jpg'); /* 设置背景图片 */
  background-size: cover; /* 背景图片覆盖整个div区域 */
  background-position: center; /* 背景图片居中 */
  position: absolute;
  transition: transform 0.8s ease-out;
}
.jenga-container {
  display: flex;
  justify-content: space-around;
  align-items: flex-end;
}
 
.jenga-block {
  background-color: yellowgreen;
  margin: 2px 0;
  text-align: center;
  transform: translateX(0);
  transition: transform 0.8s ease-out;
}

css中通过transition属性设置了天平横线、方块儿、三角形的倾斜效果。

js:

window.onload = function(xh){
    // 获取视口宽度
    const viewportWidth = window.innerWidth
    // 获取视口高度
    const viewportHeight = window.innerHeight
	var imgInfo = document.querySelector('#imgInfo')
	var line = document.querySelector('#line')
	var sjx = document.querySelector('#sjx')
	var block1 = document.querySelector('#block1')
	var block2 = document.querySelector('#block2')
	var jengacontainer = document.getElementsByClassName('jenga-container')
	//为每个容器设置height
	for(var i=0;i<jengacontainer.length;i++){
	    jengacontainer[i].style.height = viewportHeight*0.34+'px'
	}
	var jengablock = document.getElementsByClassName('jenga-block')
	//为每个容器设置height
	for(var i=0;i<jengablock.length;i++){
	    jengablock[i].style.height = viewportHeight*0.24+'px'
		jengablock[i].style.width = viewportWidth*0.15+'px'
		jengablock[i].style.fontSize = viewportHeight*0.17+'px'
	}
	imgInfo.style.height = viewportHeight*0.12+'px'
	imgInfo.style.fontSize = viewportHeight*0.06+'px'
	line.style.width = viewportWidth*0.35+'px'
	line.style.top = (viewportHeight-viewportHeight*0.63)+'px'
	sjx.style.top = (viewportHeight-viewportHeight*0.63+2)+'px'
	sjx.style.width = viewportWidth*0.08+'px'
	sjx.style.height = viewportWidth*0.08+'px'
	let szqz1 = Math.floor(Math.random() * 10);
	block1.innerHTML = szqz1;
	let szqz2 = getRandomNumber(szqz1)
	block2.innerHTML = szqz2;
	/**
	 * 点击三角形重置数字
	 */
	sjx.onclick = function(){
		var audio1 = new Audio('./audio/py2.MP3');
		// 播放音频
		audio1.play();
    }
	/**
	 * 播放音频
	 */
	if(xh!=2){
		//开始配音
		var audio = new Audio('./audio/py8.MP3');
		// 播放音频
		audio.play();
	}
	
	/**
	 * block2里面的数字大
	 */
	block2.onclick = function(){
		const y =  viewportHeight*0.3
        block2.style.transform = 'translateY('+y+'px)';
		//线变斜
		const y2 =  viewportHeight*0.12
		const radians = Math.atan2(y, viewportWidth*0.35);
		// 将弧度转换为角度
		const degrees = radians * (180 / Math.PI);
		const a = viewportWidth*0.35
		const b = viewportHeight*0.3
		const c= Math.sqrt(a*a + b*b)
		line.style.width = c+'px';
		line.style.transform = 'translateY('+y2+'px) rotate('+degrees+'deg)';
		sjx.style.transform = 'translateY('+(y/2+4)+'px)';
		//播放音频
		var audio = new Audio('./audio/py11.MP3');
		// 播放音频
		audio.play();
    }
	/**
	 * block1里面的数字大
	 */
	block1.onclick = function(){
		const y =  viewportHeight*0.3
	    block1.style.transform = 'translateY('+y+'px)';
		//线变斜
		const y2 =  viewportHeight*0.12
		const radians = Math.atan2(y, viewportWidth*0.35);
		// 将弧度转换为角度
		const degrees = radians * (180 / Math.PI);
		const a = viewportWidth*0.35
		const b = viewportHeight*0.3
		const c= Math.sqrt(a*a + b*b)
		line.style.width = c+'px';
		line.style.transform = 'translateY('+y2+'px) rotate('+(-degrees)+'deg)';
		sjx.style.transform = 'translateY('+(y/2+4)+'px)';
		//播放音频
		var audio = new Audio('./audio/py11.MP3');
		// 播放音频
		audio.play();
	}
}
function getRandomNumber(exclude) {
    let num;
    do {
        num = Math.floor(Math.random() * 10);
    } while (num === exclude);
    return num;
}

js中需要注意一下,这里有个小小的算法,因为在数字大的方块儿下移的时候,中间的天平横线长度也要跟着变,不然无法连接到两端。所以,要通过勾股定理计算出天平横线的长度、倾斜角度和中间三角形下降的距离。在block1/block2.onclick函数中可以看到这个小小的算法。

笔者这里只是实现了很简单的效果,但大概原理是对的。各位读者可以自行试试~~~~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索AI变现新模式:搭建小程序,畅享换脸写真、趣测音乐多重乐趣

一、AI创作系统介绍、 AI变现小程序是一种利用人工智能技术为用户提供服务&#xff0c;并通过某种方式实现盈利的小程序。这种小程序可以应用于多个领域&#xff0c;如AI动漫推文、AI绘画、AI换脸等。 AI小说生动漫推文&#xff1a;是一种利用AI技术和动漫制作技术&#xff0…

苹果WWDC 2024或将推出AI生成的表情符号并宣布与OpenAI的合作|TodayAI

苹果正在为即将到来的WWDC&#xff08;全球开发者大会&#xff09;做准备&#xff0c;并将展示其生成式AI技术。根据Mark Gurman在Bloomberg的《Power On》通讯中的报道&#xff0c;苹果将在2024年的WWDC上讲述自己的AI故事&#xff0c;但这可能不会像Google、Microsoft或OpenA…

宝藏功能:teamOS的文件信息总览,太好用了吧

在日常工作中&#xff0c;我们时常需要处理大量的文件和协作任务。有时&#xff0c;过多的信息和工具可能会让我们感到混乱和困扰。 但可道云的teamOS文件信息总览窗口却为我们提供了一个清晰、高效的解决方案。 一、一站式信息展示&#xff0c;让工作更透明 这个面板集成了许…

55页PDF|人工智能通用大模型(ChatGPT)的进展、风险与应对(附下载)

&#x1f449;获取方式&#xff1a; &#x1f61d;有需要的小伙伴&#xff0c;可以保存图片到wx扫描二v码免费领取【保证100%免费】&#x1f193;

OrangePi AIpro上手初体验:

OrangePi AIpro上手初体验&#xff1a; 1.基本外观及功能接口简介2.点亮OrangePi AIpro开发板3.OrangePi AIpro功能体验3.1.目标检测3.2.OCR文字识别3.3.图像的曝光增强3.4.系统的整体性能(运行ROS) 4.OrangePi AIpro体验总结4.1.硬件及软件生态&#xff1a;4.2.使用体验及性能…

医学图像分割--U-net变种

参考&#xff1a;医学图像分割综述:U-Net系列_医学图像 实例分割-CSDN博客 2D Unet 收缩路径&#xff1a;每个块包含两个连续的3 3卷积&#xff0c;后面是一个ReLU激活函数和最大池化层&#xff08;下采样&#xff09;扩展路径&#xff1a;该路径包括一个2 2转置卷积层(上采…

苹果手机突然白屏无反应怎么办?白屏修复办法分享!

苹果手机突然白屏无反应怎么办&#xff1f;下面小编就来给大家分享苹果手机突然白屏的原因和修复办法。 一般造成苹果手机出现白屏的原因如下&#xff1a; 系统问题&#xff1a;iOS系统的故障是导致苹果设备白屏无反应最常见的原因之一。例如&#xff0c;系统更新失败、应用冲…

OpenHarmony如何切换横竖屏?

前言 在日常开发中&#xff0c;大多APP可能根据实际情况直接将APP的界面方向固定&#xff0c;或竖屏或横屏。但在使用过程中&#xff0c;我们还是会遇到横竖屏切换的功能需求&#xff0c;可能是通过物理重力感应触发&#xff0c;也有可能是用户手动触发。所以本文主要带大家了…

ESP32入门:1、VSCode+PlatformIO环境搭建

文章目录 背景安装vscode安装配置中文 安装Platform IO安装PIO 新建ESP32工程参考 背景 对于刚接触单片机的同学&#xff0c;使用vscodeplatformIO来学习ESP32是最方便快捷的&#xff0c;比IDF框架简单&#xff0c;且比arduino文件管理性能更好。但是platformIO安装较为麻烦&a…

小苯的九宫格,小苯的好数组(排序),小苯的数字合并(字典树,前缀和)

小苯的九宫格 题目描述 运行代码 #include<iostream> using namespace std; int main(){int a[10];for(int i1;i<9;i){cin>>a[i];} string b;cin>>b;for(int i0;i<b.size();i){int pb[i]-0;cout<<a[p];} } 代码思路 定义数组&#xff1a;首先…

关于栈的简单讲解

哈喽&#xff0c;小伙伴们大家好呀&#xff0c;今天给大家带来栈、队列的那些知识点。 栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 总结 一种线性…

多线程编程(12)之HashMap1.8源码分析

之前已经分析过了一版1.7版本的HashMap&#xff0c;这里主要是来分析一下1.8HashMap源码。 一、HashMap数据结构 HashMap 是一个利用散列表&#xff08;哈希表&#xff09;原理来存储元素的集合&#xff0c;是根据Key value而直接进行访问的数 据结构。 在 JDK1.7 中&#xff…

MongoDB数据库清理策略: 自动化过期数据删除实战

1、引言 随着应用程序和业务数据的持续增长&#xff0c;有效地管理数据库存储空间成为维护系统性能的关键。在MongoDB这类NoSQL数据库中&#xff0c;定期清理过期数据变得尤为重要&#xff0c;这不仅能释放宝贵的存储资源&#xff0c;还能优化查询性能&#xff0c;确保数据库运…

[算法] 优先算法(三):滑动窗口(上)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

Web安全技术期末考查-vulhub靶场搭建及漏洞复现

一、实验目的与要求 能根据报告找到难度适中的漏洞&#xff0c;搭建弱点环境&#xff0c;并验证该漏洞&#xff1b; 2.能给出该漏洞的修复建议。 二、实验原理与内容 漏洞原理 漏洞原理通常指的是计算机系统、软件、网络或其他技术系统中存在的安全缺陷&#xff0c;这些缺陷…

Ubuntu18 配置FFmpeg开发环境 (Vscode+CMake)

关于Vscode插件安装不再赘述&#xff0c;本文主要讲解如何配置FFmpeg的开发环境以及CMake文件写法&#xff0c;如果不知道该安装什么插件请看本文&#xff1a; Ubuntu配置Vscode 文章目录 1.安装FFmpeg开发包2.配置Vscode项目3.使用C语言验证FFmpeg版本 1.安装FFmpeg开发包 更新…

粉丝问,有没有UI的统计页面,安排!

移动应用的数据统计页面具有以下几个重要作用&#xff1a; 监控业务指标&#xff1a;数据统计页面可以帮助用户监控关键业务指标和数据&#xff0c;例如用户活跃度、销售额、转化率等。通过实时更新和可视化呈现数据&#xff0c;用户可以及时了解业务的整体状况和趋势。分析用…

深入剖析—【服务器硬件】与【Nginx配置】:从基础到实战

服务器硬件部分&#xff1a; Processor (CPU)&#xff1a;服务器的计算核心&#xff0c;负责处理数据和执行程序。Memory (RAM)&#xff1a;用于暂时存储和快速访问数据&#xff0c;决定了系统的运行速度和并发处理能力。Storage (HDD/SSD)&#xff1a;长期存储数据的设备&…

基于JT/T808、JT/T1078、苏标、粤标视频主动安全监控

1.概述 如下图是以实时视频点播与部标机产生了主动安全报警&#xff0c;各个服务之间的交互流程说明。 整个系统有以下几个核心组件组成&#xff1a; 1&#xff1a;系统业务端&#xff1a;车载监控业务系统&#xff0c;给用户提供车载监控整套业务流程与界面呈现&#xff1b;…

Docker安装Oracle11g数据库

操作系统&#xff1a;centOS9使用此方法检查是否安装Docker&#xff1a;docker --help&#xff0c;如果有帮助文件则证明安装成功使用此语句检查Docker是否正在运行&#xff1a;docker images&#xff0c;实际上是查看本地镜像如果发现未运行则开启Docker&#xff1a;systemctl…