首页 > 编程语言 >请用js实现一个简单的小区楼的电梯运行程序

请用js实现一个简单的小区楼的电梯运行程序

时间:2025-01-20 14:10:45浏览次数:1  
标签:const floor js 请用 电梯 currentFloor 楼层 移动

在前端开发中,实现一个简单的小区楼电梯运行程序可以通过模拟电梯的基本行为来完成。以下是一个使用JavaScript实现的简单电梯模拟程序,它允许用户选择楼层并模拟电梯的上下行。

HTML部分(用于创建用户界面):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>电梯模拟程序</title>
    <style>
        #elevator {
            width: 100px;
            height: 100px;
            background-color: grey;
            position: absolute;
            left: 50px;
            top: 50px;
            text-align: center;
            line-height: 100px;
            color: white;
        }
        .floor {
            height: 50px;
            width: 100%;
            border-bottom: 1px solid black;
            text-align: center;
            line-height: 50px;
        }
    </style>
</head>
<body>
    <div id="elevator">1</div>
    <div id="floors">
        <div class="floor" onclick="requestFloor(1)">1</div>
        <div class="floor" onclick="requestFloor(2)">2</div>
        <div class="floor" onclick="requestFloor(3)">3</div>
        <!-- 添加更多楼层 -->
    </div>
    <script src="elevator.js"></script>
</body>
</html>

JavaScript部分(用于实现电梯逻辑):

let currentFloor = 1; // 电梯当前所在楼层
let targetFloor = 1; // 电梯目标楼层
const elevator = document.getElementById('elevator'); // 电梯元素
const floors = document.querySelectorAll('.floor'); // 所有楼层元素
let isMoving = false; // 电梯是否正在移动
const moveSpeed = 500; // 电梯移动速度(毫秒)

// 更新电梯显示楼层
function updateElevatorDisplay() {
    elevator.textContent = currentFloor;
}

// 移动电梯到指定楼层
function moveToFloor(floor) {
    if (isMoving || floor === currentFloor) return; // 如果电梯正在移动或已在目标楼层,则不执行移动
    isMoving = true; // 设置电梯为移动状态
    const distance = Math.abs(floor - currentFloor) * 50; // 计算移动距离(每个楼层高度为50px)
    const direction = floor > currentFloor ? 'down' : 'up'; // 判断移动方向
    const finalTop = 50 + (floor - 1) * 50; // 计算电梯最终位置(顶部偏移量)
    elevator.style.transition = `top ${moveSpeed}ms linear`; // 设置过渡效果
    elevator.style.top = `${finalTop}px`; // 更新电梯位置
    // 在移动结束后更新当前楼层和状态
    setTimeout(() => {
        currentFloor = floor;
        isMoving = false;
        updateElevatorDisplay();
    }, moveSpeed);
}

// 请求电梯到指定楼层
function requestFloor(floor) {
    if (floor === currentFloor) return; // 如果已在请求楼层,则不执行操作
    targetFloor = floor; // 设置目标楼层
    if (!isMoving) { // 如果电梯当前未移动,则立即开始移动
        moveToFloor(targetFloor);
    } else { // 如果电梯正在移动,则在当前移动结束后开始新的移动(简化逻辑,不考虑方向优化)
        setTimeout(() => {
            moveToFloor(targetFloor);
        }, moveSpeed);
    }
}

这个简单的电梯模拟程序允许用户通过点击楼层来选择目标楼层,并模拟电梯的上下行。你可以根据需要扩展这个程序,例如添加更多楼层、优化电梯移动逻辑(考虑同方向连续移动的情况)、添加电梯门开关动画等。

标签:const,floor,js,请用,电梯,currentFloor,楼层,移动
From: https://www.cnblogs.com/ai888/p/18681247

相关文章

  • 当用户刷新网页时,js的请求有哪些地方会有缓存处理呢?
    当用户刷新网页时,JavaScript(JS)的请求在多个环节都可能涉及到缓存处理。以下是一些主要的缓存处理点和相关机制:浏览器缓存:浏览器会尝试缓存已下载的JS文件,以便在将来的页面加载中重新使用它们,减少对服务器的请求次数和页面加载时间。当用户刷新网页时,浏览器首先会检查本地缓......
  • cpp struct json相互转换
    C++结构体与JSON的相互转换在现代软件开发中,数据的序列化和反序列化是一个常见的需求。尤其在客户端和服务器之间的数据交换中,JSON因其简单、易读和良好的兼容性而被广泛使用。本文将介绍如何在C++中实现结构体和JSON之间的相互转换,重点介绍使用 nlohmann/json库。nlohmann/jso......
  • 前端人必知必会:Node.js进程深度剖析
    文章目录一、Node.js进程初相识二、Node.js进程核心概念2.1进程的基本定义2.2与线程的爱恨情仇2.3进程在Node.js架构中的角色三、Node.js进程相关模块3.1process模块:进程掌控者3.2child_process模块:子进程创建利器3.3cluster模块:多核CPU的完美搭档四、......
  • 深入Node.js工具函数:前端开发的得力助手
    文章目录引言1.Node.js工具函数基础1.1常用工具函数概述1.2工具函数与前端开发的关联2.核心工具函数解析2.1path模块2.1.1resolve函数2.1.2join函数2.2fs模块2.2.1readFile与writeFile2.2.2mkdir与rmdir2.3util模块2.3.1inherits函数2.3.2inspe......
  • 【转】[JavaScript] JS 对象和 JSON 的区别与转换
    转自:kimi.ai在JavaScript中,JS对象和JSON是两个密切相关但又有所区别的概念。以下是它们的主要区别:1. 定义和用途JS对象JS对象是JavaScript中的一种数据结构,用于存储键值对(key-valuepairs)。它是JavaScript中的基本数据类型之一,可以用来表示复杂的数据结构,例如用......
  • [实现Rpc] 环境搭建 | JsonCpp | Mudou库 | callBack()
    目录1.项目介绍2.技术选型3.开发环境和环境搭建Ubuntu-22.04环境搭建1.安装wget(一般情况下默认会自带)2.更换国内软件源①备份原始/etc/apt/sources.list文件②编辑软件源文件③更新软件包列表3.安装常用工具3.1安装lrzsz传输工具3.2安装编译器gcc......
  • gorm - datatypes.JSONQuery 多种 JSON 查询方式
    一.官方:https://github.com/go-gorm/datatypes 二.modeltypeUserstruct{Name`gorm:"column:name;type:varchar(255);`Attributesdatatypes.JSON`gorm:"column:attributes;type:json"`}//数据内容user:=model.Us......
  • spring +fastjson 的 rce
    前言众所周知,spring下是不可以上传jsp的木马来rce的,一般都是控制加载class或者jar包来rce的,我们的fastjson的高版本正好可以完成这些,这里来简单分析一手一、环境搭建<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s......
  • 后盾人JS--JS值类型使用(续章)
    电话号码模糊处理对电话号码进行模糊处理,要进行一些类型转换<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><titl......
  • node.js高校思政研究中心管理系统程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景关于高校思政研究中心管理问题的研究,现有研究主要以传统管理模式的探讨和思政教育理论研究为主,专门针对高校思政研究中心管理系统的研究较少。在国外,部分高......