js獲取html元素并設置高度為100vh-鍵盤高度

獲取HTML元素并設置高度為(100vh - 鍵盤高度)

我將設計一個頁面,展示如何獲取HTML元素并動態設置其高度為視口高度減去鍵盤高度,這在移動設備上特別有用,可以避免鍵盤遮擋內容。

設計思路

  • 創建一個帶有輸入框的界面,模擬鍵盤彈出場景
  • 使用JavaScript檢測窗口大小變化并動態計算合適的高度
  • 提供可視化反饋,顯示當前計算的高度值
  • 設計響應式布局,確保在各種設備上都能正常工作

下面是完整的實現代碼:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>動態高度調整示例</title><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"><style>* {margin: 0;padding: 0;box-sizing: border-box;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;}body {background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);color: #333;min-height: 100vh;padding: 20px;display: flex;flex-direction: column;align-items: center;}.container {width: 90%;max-width: 800px;background: rgba(255, 255, 255, 0.95);border-radius: 15px;box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);padding: 25px;margin: 20px 0;display: flex;flex-direction: column;gap: 20px;}header {text-align: center;margin-bottom: 10px;}h1 {color: #2c3e50;font-size: 2.2rem;margin-bottom: 10px;}.description {color: #7f8c8d;font-size: 1.1rem;line-height: 1.6;}.content-box {border: 2px solid #e0e0e0;border-radius: 10px;overflow: hidden;transition: height 0.3s ease;background: white;}.content-header {background: #3498db;color: white;padding: 15px;display: flex;justify-content: space-between;align-items: center;}.content-body {padding: 20px;overflow-y: auto;}.height-info {display: flex;justify-content: space-between;background: #f8f9fa;padding: 15px;border-radius: 8px;margin-top: 10px;}.info-item {text-align: center;flex: 1;}.info-value {font-size: 1.8rem;font-weight: bold;color: #3498db;}.info-label {color: #7f8c8d;font-size: 0.9rem;}.input-group {display: flex;flex-direction: column;gap: 10px;margin: 20px 0;}.input-group label {font-weight: 600;color: #2c3e50;}.input-group input, .input-group textarea {padding: 15px;border: 2px solid #ddd;border-radius: 8px;font-size: 16px;transition: border-color 0.3s;}.input-group input:focus, .input-group textarea:focus {border-color: #3498db;outline: none;}.visual-keyboard {background: #e0e0e0;border-radius: 8px;padding: 15px;text-align: center;margin-top: 20px;display: none;}.keyboard-toggle {padding: 12px 20px;background: #e74c3c;color: white;border: none;border-radius: 8px;cursor: pointer;font-size: 16px;font-weight: 600;transition: background 0.3s;margin-top: 10px;display: flex;align-items: center;justify-content: center;gap: 8px;}.keyboard-toggle:hover {background: #c0392b;}.instructions {background: #fff8e1;border-left: 4px solid #ffc107;padding: 15px;border-radius: 4px;margin-top: 20px;}.instructions h3 {color: #d35400;margin-bottom: 10px;}.instructions ul {padding-left: 20px;}.instructions li {margin-bottom: 8px;line-height: 1.5;}@media (max-width: 768px) {.container {width: 95%;padding: 15px;}h1 {font-size: 1.8rem;}.height-info {flex-direction: column;gap: 15px;}.visual-keyboard {display: block;}}@media (max-width: 480px) {h1 {font-size: 1.5rem;}.description {font-size: 1rem;}.info-value {font-size: 1.5rem;}}</style>
</head>
<body><div class="container"><header><h1>動態高度調整示例</h1><p class="description">此頁面演示如何獲取HTML元素并設置其高度為(100vh - 鍵盤高度),適用于移動設備避免鍵盤遮擋內容。</p></header><div class="content-box" id="adjustableElement"><div class="content-header"><span>可調整高度的元素</span><span id="currentHeight">高度: 400px</span></div><div class="content-body"><div class="input-group"><label for="sampleInput">示例輸入框(點擊測試鍵盤彈出)</label><input type="text" id="sampleInput" placeholder="點擊此處測試..."></div><div class="input-group"><label for="sampleTextarea">示例文本區域</label><textarea id="sampleTextarea" rows="4" placeholder="點擊此處測試..."></textarea></div><button class="keyboard-toggle" id="keyboardToggle"><i class="fas fa-keyboard"></i> 顯示/隱藏虛擬鍵盤</button><div class="visual-keyboard" id="visualKeyboard"><p>虛擬鍵盤區域(模擬移動設備鍵盤)</p><div style="height: 200px; display: flex; justify-content: center; align-items: center; background: #c0c0c0; border-radius: 5px;"><i class="fas fa-keyboard" style="font-size: 48px; color: #666;"></i></div></div></div></div><div class="height-info"><div class="info-item"><div class="info-value" id="viewportHeight">0px</div><div class="info-label">視口高度</div></div><div class="info-item"><div class="info-value" id="keyboardHeight">0px</div><div class="info-label">鍵盤高度</div></div><div class="info-item"><div class="info-value" id="calculatedHeight">0px</div><div class="info-label">計算高度</div></div></div><div class="instructions"><h3>使用說明</h3><ul><li>在移動設備上,當鍵盤彈出時,頁面高度會發生變化</li><li>JavaScript會檢測窗口大小變化并計算合適的高度</li><li>元素高度會自動調整為: (視口高度 - 鍵盤高度)</li><li>在桌面瀏覽器中,可以點擊"顯示/隱藏虛擬鍵盤"進行測試</li></ul></div></div><script>document.addEventListener('DOMContentLoaded', function() {const adjustableElement = document.getElementById('adjustableElement');const currentHeightSpan = document.getElementById('currentHeight');const viewportHeightSpan = document.getElementById('viewportHeight');const keyboardHeightSpan = document.getElementById('keyboardHeight');const calculatedHeightSpan = document.getElementById('calculatedHeight');const keyboardToggle = document.getElementById('keyboardToggle');const visualKeyboard = document.getElementById('visualKeyboard');let keyboardVisible = false;let originalViewportHeight = window.innerHeight;// 初始更新updateHeights();// 監聽窗口大小變化window.addEventListener('resize', function() {updateHeights();});// 鍵盤切換按鈕keyboardToggle.addEventListener('click', function() {keyboardVisible = !keyboardVisible;if (keyboardVisible) {visualKeyboard.style.display = 'block';// 模擬鍵盤彈出,視口高度減少window.dispatchEvent(new Event('resize'));} else {visualKeyboard.style.display = 'none';// 模擬鍵盤收起,恢復視口高度window.dispatchEvent(new Event('resize'));}});// 更新高度函數function updateHeights() {const viewportHeight = window.innerHeight;const visualKeyboardHeight = keyboardVisible ? 200 : 0;// 在移動設備上,鍵盤彈出時會改變視口高度// 這里我們通過比較當前視口高度和原始視口高度來計算鍵盤高度const keyboardHeight = Math.max(0, originalViewportHeight - viewportHeight);// 計算合適的高度const calculatedHeight = viewportHeight - Math.max(keyboardHeight, visualKeyboardHeight);// 更新顯示信息viewportHeightSpan.textContent = `${viewportHeight}px`;keyboardHeightSpan.textContent = `${keyboardHeight}px`;calculatedHeightSpan.textContent = `${calculatedHeight}px`;// 設置元素高度adjustableElement.style.height = `${calculatedHeight}px`;currentHeightSpan.textContent = `高度: ${calculatedHeight}px`;}// 初始化時保存原始視口高度setTimeout(() => {originalViewportHeight = window.innerHeight;updateHeights();}, 100);// 添加輸入框聚焦時更新高度的邏輯(模擬移動設備行為)const inputs = document.querySelectorAll('input, textarea');inputs.forEach(input => {input.addEventListener('focus', function() {// 在移動設備上,聚焦輸入框時鍵盤彈出,這里我們模擬這個行為if (window.innerWidth <= 768) { // 僅在移動設備上模擬keyboardVisible = true;visualKeyboard.style.display = 'block';updateHeights();}});input.addEventListener('blur', function() {if (window.innerWidth <= 768) {keyboardVisible = false;visualKeyboard.style.display = 'none';updateHeights();}});});});</script>
</body>
</html>

功能說明

  1. 動態高度調整:頁面中的內容區域會根據窗口大小自動調整高度
  2. 鍵盤高度模擬:提供了虛擬鍵盤顯示/隱藏功能,模擬移動設備上鍵盤彈出場景
  3. 實時數據展示:顯示當前視口高度、鍵盤高度和計算后的高度值
  4. 響應式設計:在移動設備和桌面設備上都能正常工作
  5. 使用說明:提供了詳細的使用說明,幫助用戶理解功能

技術實現

  • 使用JavaScript監聽窗口resize事件
  • 通過比較窗口大小變化計算鍵盤高度
  • 動態設置元素高度為(視口高度 - 鍵盤高度)
  • 添加了移動設備檢測和模擬功能

您可以直接將上述代碼復制到HTML文件中,然后在瀏覽器中打開使用。在移動設備上測試效果更佳。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94456.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94456.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94456.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于SpringBoot的校園博客管理系統

&#x1f517; 目錄 一. 前言 ??二. 前端框架、后端框架以及存儲框架使用情況說明 ??三. 核心技術 ????1. ?Java開發語言 ????2. ?MyBatis ????3. ?Mysql ????4. ?Vue ????5. ?部署項目 ??四. 演示效果 ????1. 管理員功能模塊 ??????…

Nginx + Certbot配置 HTTPS / SSL 證書

前提條件&#xff1a; 1.已有域名 2.Nginx 已安裝并正在運行&#xff0c;且有對應的 Server 配置 3.防火墻開放 80 和 443 端口 安裝 EPEL 倉庫&#xff1a; sudo yum install epel-release -y安裝 Snapd sudo yum install snapd -y啟用并啟動 Snapd Socket sudo systemctl ena…

圖結構使用 Louvain 社區檢測算法進行分組

圖結構使用 Louvain 社區檢測算法進行分組 flyfish Louvain 算法是一種基于模塊度最大化的社區檢測算法&#xff0c;核心目標是在復雜網絡中找到“內部連接緊密、外部連接稀疏”的社區結構。它的優勢在于高效性&#xff08;可處理百萬級節點的大規模網絡&#xff09;和近似最優…

layui.formSelects自定義多選組件在layer.open中使用、獲取、復現

layui.formSelects自定義多選組件在layer.open中使用、獲取、復現 引入css和js //<th:block th:include"include :: layui-formSelects-css"/> <link th:href"{/ajax/libs/layui-formSelects/formSelects-v4.css}" rel"stylesheet"/>…

基于SpringBoot的社團管理系統【2026最新】

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

運行node18報錯

又碰到一個奇葩的問題&#xff0c;報錯如下> tigermes.vue30.1.0 serve > vue-cli-service serveBrowserslist: caniuse-lite is outdated. Please run:npx update-browserslist-dblatestWhy you should do it regularly: https://github.com/browserslist/update-db#rea…

Python第三方庫IPFS-API使用詳解:構建去中心化應用的完整指南

目錄 Python第三方庫IPFS-API使用詳解&#xff1a;構建去中心化應用的完整指南 引言&#xff1a;IPFS與去中心化存儲的革命 星際文件系統&#xff08;IPFS&#xff0c;InterPlanetary File System&#xff09;是一種革命性的點對點超媒體協議&#xff0c;旨在創建持久且分布式的…

ETL與iPaaS的融合方案:加速數據集成流程

在今天的商業世界里&#xff0c;數據幾乎無處不在。企業每天都在產生和接收海量的數據——從CRM到ERP&#xff0c;從云端SaaS應用到本地數據庫&#xff0c;來源越來越分散&#xff0c;集成也越來越復雜。 傳統的ETL工具&#xff08;提取、轉換、加載&#xff09;在處理結構化數…

詳解flink SQL基礎(四)

文章目錄1.Flink SQL介紹2.streaming SQL&watermarks使用3.窗口聚合&#xff08;window aggregations&#xff09;4.over aggregations5.FlinkSQL 流連接&#xff08;Streaming join&#xff09;6.使用MATCH_RECOGNIZE 進行模式識別和復雜事件處理7.變更記錄&#xff08;ch…

有鹿機器人:為城市描繪清潔新圖景的智能使者

一、智慧清潔&#xff1a;科技賦能的環境革新每天清晨&#xff0c;當我沿著小區路徑緩緩行駛&#xff0c;雙激光雷達系統便開始精準測繪環境。我的專業清掃能力源自2cm精度死亡貼邊技術&#xff0c;這項讓同行驚嘆的能力&#xff0c;可以輕松震出嵌了十年的煙頭&#xff0c;徹底…

Tableau Server高危漏洞允許攻擊者上傳任意惡意文件

Tableau Server 存在一個嚴重安全漏洞&#xff0c;可能允許攻擊者上傳并執行惡意文件&#xff0c;最終導致系統完全淪陷。該漏洞編號為 CVE-2025-26496&#xff0c;CVSS 評分為 9.6 分&#xff0c;影響 Windows 和 Linux 平臺上的多個 Tableau Server 和 Tableau Desktop 版本。…

數據結構07(Java)-- (堆,大根堆,堆排序)

前言 本文為本小白&#x1f92f;學習數據結構的筆記&#xff0c;將以算法題為導向&#xff0c;向大家更清晰的介紹數據結構相關知識&#xff08;算法題都出自&#x1f64c;B站馬士兵教育——左老師的課程&#xff0c;講的很好&#xff0c;對于想入門刷題的人很有幫助&#x1f4…

onnx入門教程(七)——如何添加 TensorRT 自定義算子

在前面的模型入門系列文章中&#xff0c;我們介紹了部署一個 PyTorch 模型到推理后端&#xff0c;如 ONNXRuntime&#xff0c;這其中可能遇到很多工程性的問題。有些可以通過創建 ONNX 節點來解決&#xff0c;該節點仍然使用后端原生的實現進行推理。而有些無法導出到后端的算法…

YggJS RButton 按鈕組件 v1.0.0 使用教程

&#x1f4cb; 目錄 簡介核心特性快速開始安裝指南基礎使用主題系統高級功能API 參考最佳實踐性能優化故障排除總結 &#x1f680; 簡介 YggJS RButton 是一個專門為 React 應用程序設計的高性能按鈕組件庫。它提供了兩套完整的設計主題&#xff1a;科技風主題和極簡主題&…

Linux(二十)——SELinux 概述與狀態切換

文章目錄前言一、SELinux 概述1.1 SELinux 簡介1.2 SELinux 特點1.2.1 MAC&#xff08;Mandatory Access Control&#xff09;1.2.2 RBAC&#xff08;Role-Based Access Control&#xff09;1.2.3 TE&#xff08;Type Enforcement&#xff09;1.3 SELinux 的執行模式1.4 SELinu…

Linux學習-TCP網絡協議(補充)

一、TCP 頭部標志位 TCP 頭部包含多種標志位&#xff0c;用于控制連接建立、數據傳輸、連接斷開等過程&#xff0c;核心標志位及作用如下&#xff1a;標志位英文全稱作用SYNSynchronize Sequence Numbers請求建立連接&#xff0c;三次握手第一步發送 SYN 包ACKAcknowledgment響…

Go編寫的輕量文件監控器. 可以監控終端上指定文件夾內的變化, 阻止刪除,修改,新增操作. 可以用于AWD比賽或者終端應急響應

工具介紹 0RAYS-AWD-Filechecker一個用Golang編寫的, 輕量級的文件監控器, 會監控指定文件夾內文件刪除, 修改, 新增操作, 然后立刻告警并復原. 一開始是為AWD比賽寫的, 主要是為了防止靶機的web目錄被上馬. 但也可以用到藍隊等場景上. 由于使用的Linux的系統調用, 僅支持Linux…

【6】MySQL 數據庫基礎操作

MySQL 數據庫基礎操作數據庫操作查看數據庫創建數據庫刪除數據庫修改數據庫數據表操作創建表修改表刪除表數據庫操作 查看數據庫 查看有哪些數據庫&#xff1f; 示例&#xff1a; [rootlocalhost][(none)]> show databases; -------------------- | Database |…

Android 探索APP/應用啟動模式、Intent的Flag啟動標志位

寫在前面&#xff1a;Android APP有四種啟動模式——》標準模式(Standard)、棧頂復用模式(SingleTop)、棧內復用模式(SingleTask)、單例模式(SingleInstance)&#xff0c;默認就是標準模式。啟動模式決定了Activity在任務棧內的存在方式&#xff0c;影響了Back返回鍵Activity返…

Y9000P部署開源模型

環境信息&#xff1a; 設備&#xff1a;Y9000P GPU&#xff1a;RTX 3060 6G 系統版本&#xff1a;Ubuntu 24.04 一、下載模型 1、環境準備 1、安裝工具 apt-get -y install git-lfs git lfs install apt-get install python3 python-is-python3 pip3.12 config set global.inde…