监听键盘事件

news2024/11/9 9:24:41

问题:点击输入框弹出键盘遮挡文字

需求:点击输入框键盘弹起,点击别处键盘回收,输入框回到原来状态,

解决办法:

1.采用占位的思想(隐藏),文本框控制采用焦点控制,使用两个@focus和@blur这两个法控制,展示键盘,关闭键盘,这里采用v-textarea来写文本框格式,

<v-container>
          <v-row>
            <v-col cols="12">
              <!-- 文本输入框,绑定v-model来双向绑定数据,使用ref属性以便在JS中引用 -->
              <v-textarea
                label="请输入文字"
                v-model="text"
                ref="textarea"
                @focus="showKeyboard"
                @blur="closeKeyboard"
              ></v-textarea>
            </v-col>
          </v-row>
        </v-container>
        <!-- 占位元素,用于在键盘弹出时调整页面滚动 -->
         <div ref="keyboardDis" :style="{ height: keyboardVisible ? '150px' : '0' }"></div>

这里因为加了text,data数据这部分需要进行初始化,vue2属性,后面方法里面数据需要在data声明,初始化

data: () => ({
     text: '',
    lastHeight: 0, // 用于记录窗口高度,以便检测键盘弹出
    originalScrollPosition: 0, // 用于记录原始滚动位置
    keyboardVisible: false, // 控制占位元素显示的标志
    lastScrollY: 0, // 记录页面滚动位置
    initialViewportHeight: window.visualViewport ? window.visualViewport.height : window.innerHeight,
    isInputFocused: false,
}),

之后在methods:中进行写方法这里部分通过占位元素来控制文本框位置,当文本框获得焦点时,会调用这个键盘显示的焦点,且占位键盘出现,文本框上移,当文本框失焦时候,这样隐藏占位元素恢复到原始滚动位置。

showKeyboard() {
      this.keyboardVisible = true;
      this.originalScrollPosition = window.scrollY; // 记录原始滚动位置
      console.log("orginalscroll",this.originalScrollPosition);
      this.$nextTick(() => { // 确保DOM更新完成后执行
        const keyboardDis = this.$refs.keyboardDis;
        keyboardDis.style.display = "block"; // 显示占位元素
        // window.addEventListener('scroll', this.preventScroll, { passive: false }); // 阻止页面滚动
        setTimeout(() => { // 延迟执行,确保键盘已经弹出
          const scrollHeight = window.scrollY + keyboardDis.offsetHeight;
          console.log("scrollheight",scrollHeight);
          window.scrollTo(0, scrollHeight); // 滚动页面,使输入框可见
        }, 300);
      });
    },
    // 关闭键盘时调用的方法
    closeKeyboard() {
      const keyboardDis = this.$refs.keyboardDis;
      keyboardDis.style.display = "none"; // 隐藏占位元素
      console.log("or",this.originalScrollPosition);
      window.scrollTo(0, this.originalScrollPosition); // 恢复到原始滚动位置
    },

现在解决了点击文本框聚焦问题,但是现在未解决的部分是如下图右上角有个下拉箭头部分,点击收起键盘,理应文本框也会恢复原来的状态,但是目前是无法实现,

 采用了事件监听方法:使用resize事件监听方法,在mounted()加入事件监听,

window.addEventListener('resize',this.handleResize);

这样需要释放,在下面写一个方法beforeDestroy()方法,里面写移除resize事件监听,

window.removeEventListener('resize', this.handleResize); // 移除窗口大小变化事件监听

之后再methods中写一个方法handleResize()

handleResize() {
      const currentHeight = window.innerHeight;
      console.log("currentheight",currentHeight);
      if (this.lastHeight && currentHeight < this.lastHeight) {
        this.showKeyboard(); // 如果高度变小,可能是键盘弹出
        console.log("1111",1111111);
      } else {
        this.closeKeyboard(); // 如果高度恢复正常,可能是键盘收起
        console.log("2222",222222);
      }
      this.lastHeight = currentHeight; // 更新记录的窗口高度
    },

但是原理就是安卓的键盘是浮于页面的,所以监听resize事件监听不到,所以上面事件不会监听到,键盘主动收起,也不会执行逻辑,但是息屏是改变resize事件,可以监听到,所以会调逻辑,

同时也尝试了监听其他事件未果,尝试了加入防抖和节流,也没有成功,

最后使用另一种文本套文本形式完成,但是最后这种组件方式更改样式,如果给文本加类控制样式,没有效果,还是会遮挡,最后改了全局样式才有改变,但是别的弹窗也会跟着一样变化。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多态的概念

多态 所谓的多态其实就是多种形态&#xff0c;它又被分为编译时多态(静态多态) 和 运行时多态(动态多态)。 静态的多态其实就是之前的模版和函数重载&#xff0c;今天我们主要讲动态的多态。所谓的动态多态其实就是相同的函数&#xff0c;完成不同的功能。 这就实现了明明都是…

C#搭建WebApi服务

1&#xff0c;OWIN的介绍 OWIN 的全称是 "Open Web Interface for .NET"&#xff0c; OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口&#xff0c; 其目的是为了实现服务器与应用之间的解耦&#xff0c;使得便携式 .NET Web 应用以及跨平台的愿望…

MongoDB事务机制

事务机制 1.事务概念 在对数据的操作的过程中&#xff0c;涉及到一连串的操作&#xff0c;这些操作如果失败&#xff0c;会导致我们的数据部分变化了&#xff0c;部分没变化。这个过程就好比如你去吃早餐&#xff0c;你点完餐了&#xff0c;并且吃完早餐了&#xff0c;没付钱你…

ES6标准---【五】【看这一篇就够了!!!】

目录 ES6以往文章 箭头函数的基本用法 箭头函数的用处 简化回调函数 rest参数与箭头函数结合 箭头函数使用注意点 this指向的问题 其它不存在的变量 不能使用call()、apply()、bind()方法改变this的指向 箭头函数不适用场合 定义对象时&#xff0c;对象方法内部包含…

信创环境下源代码防泄露解决方案

在当今数字化时代&#xff0c;信息安全已成为企业生存与发展的基石&#xff0c;尤其是在信息技术应用创新&#xff08;信创&#xff09;环境下&#xff0c;数据保护更是被提升至前所未有的高度。SDC沙盒防泄露系统以其独特的技术架构和卓越的安全性能&#xff0c;在信创环境中构…

ES6标准---【六】【学习ES6标准看这一篇就够了!!!】

目录 以往ES6文章 前言 对象属性的简洁表示法 一个实际例子 简介写法在打印对象时也很有用 注意 对象属性名表达式 用表达式做属性名 用表达式定义方法名 注意 对象方法的name属性 对象属性的可枚举性和遍历 可枚举性 属性的遍历 属性比那里次序规则 super关键…

图片生成PPT!首推这款一站式AI制作PPT工具!

在当今快节奏的工作中&#xff0c;制作一份精美的PPT演示文稿往往是一项费时费力的工作&#xff0c;特别是当我们需要将大量的图片转化为PPT时&#xff0c;传统的方法显得尤为繁琐。幸运的是&#xff0c;随着AI人工智能技术的飞速发展&#xff0c;一种更便捷地将图片转为ppt的解…

计算机毕业设计 《计算机基础》网上考试系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Java之线程篇三

​​​​​​​ 目录 线程状态 观察线程的所有状态 线程状态及其描述 线程状态转换 代码示例1 代码示例2 线程安全 概念 线程不安全的代码示例 线程不安全的原因 线程安全的代码示例-加锁 synchronized关键字 synchronized的特性 小结 形成死锁的四个必要条件 …

Java设计模式之命令模式介绍和案例示范

一、命令模式简介 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户端进行参数化、对请求排队或记录日志&#xff0c;以及支持可撤销的操作。命令模式的核心思想是将发出请…

kvm 虚拟机命令行虚拟机操作、制作快照和恢复快照以及工作常用总结

文章目录 kvm 虚拟机命令行虚拟机操作、制作快照和恢复快照一、kvm 虚拟机命令行虚拟机操作(创建和删除)查看虚拟机virt-install创建一个虚拟机关闭虚拟机重启虚拟机销毁虚拟机 二、kvm 制作快照和恢复快照**创建快照**工作常见问题创建快照报错&#xff1a;&#xff1a;intern…

超详细、史上最全pytorch安装教程

一、anaconda安装 1.下载 Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrorhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 这里划到最下面选择5.3.1最新版&#xff1a; 2.下载完成后安装 点击next 点击 I agree 选择All Us…

ignav的INS的状态更新

ignav的代码 static void updstat(const insopt_t *opt,insstate_t *ins,const double dt,const double *x0,const double *P0,double *phi,double *P,double *x,double *Q) {opt->exprn?getprn(ins,opt,dt,Q): getQ(opt,dt,Q); // //phi 状态转移矩阵 &#xff0c;离散化…

算法学习攻略总结 : 入门至进阶,通关之路指南

❃博主首页 &#xff1a; <码到三十五> ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a; <搬的每块砖&#xff0c;皆为峰峦之基&#xff1b;公众号搜索(码到…

CircleProgressView 鸿蒙ArkTS自定义View实现圆形进度条

上篇的截图中除了一个上下的箭头&#xff0c;还有一个圆形进度条&#xff0c;今天我们来讲讲这个如何进行实现 我们看这个图形的构造&#xff0c;其实很简单&#xff1a;一个圆形图形&#xff0c;以及一个文本来显示进度 所以我们用一个层叠布局 绘制一个带颜色的圆形&#xff…

『功能项目』播放动画时禁止点击移动【40】

我们打开上一篇39GameObject对象池 - 第三职业的项目&#xff0c; 本章要做的事情是在第三职业播放续航攻击动画时禁止点击时触发的移动函数&#xff0c;换句话说是在播放攻击动画时禁止移动 修改脚本&#xff1a;PlayerRayClickNavigation.cs 运行项目 - 播放第三职业续航技能…

2-92 基于matlab的KPCA的TE过程的故障监测

基于matlab的KPCA的TE过程的故障监测&#xff0c;利用核主元分析法(KPCA)来进行故障检测的思想,将输入空间中复杂的非线性问题转化为特征空间中的线性问题&#xff0c;计算步骤&#xff1a;&#xff08;1&#xff09; 选择监控变量&#xff0c;收集正常工况下的各变量的样本&am…

【警告 C6031:返回值被忽略:scanf】

警告 C6031 返回值被忽略: “scanf”。 错误 C4996 scanf: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. #include <stdio.h> int max(int x, int y…

OKHttp实现原理分享

前言介绍 大约在2年半之前&#xff0c;就想写一篇关于OKHttp原理的文章&#xff0c;一来深入了解一下其原理&#xff0c;二来希望能在了解原理之后进行更好的使用。但是因为种种原因&#xff0c;一直无限往后推迟&#xff0c;最近因为我们情景智能半个月一次的分享轮到我了&…

手势识别&手势控制系统-OpenCV&Python(源码和教程)

项目特点 手部手势识别&#xff1a; 项目利用计算机视觉技术来识别手部的各种手势。这种技术可以应用于多种场景&#xff0c;比如人机交互、游戏控制、无障碍技术等。 自定义手势&#xff1a; 用户可以自定义手势&#xff0c;这意味着可以通过训练新的手势模式来扩展系统的功能…