DatePicker日期选择器图标替换

2023-11-14

实现目标:实现datepicker中的日历图标替换成类似于select选择器组件的箭头,且箭头旋转时间面板的展开收起相耦合。

遇到的问题:

  1. 点击日历图标不能控制面板的开合动作

  1. datepicker组件实例上通过代码手动聚焦,不支持手动失焦

  1. 无可用的直接控制时间面板开合的事件

解决方案:

方法1:将原有的日历图标通过display:none进行隐藏,将其替换成箭头。

i {display: none;} // 日历图标隐藏
i {width: 11px; height: 7px;background: url(../../../assets/img/arrow.png) no-repeat center/100%;} // 日历图标替换成箭头

onMounted函数中获取箭头的dom元素,并给dom元素加入click监听事件。

期望实现:箭头旋转和时间面板开合同步变化。一是箭头选择:可以通过transform = 'rotate(0deg)'设置不同旋转角度来实现。二是时间面板开合,原有组件支持输入框聚焦面板打开,输入框失焦面板关闭。也就是说若可以代码实现手动聚焦和失焦,便可以控制时间面板的开合。

 onMounted(() => {
    // arrowPicture为箭头的dom元素 datePickerDom为时间组件dom元素
    arrowPicture.value.addEventListener('click', () => {
        if (失焦时) {
            datePickerDom.value.focus();
            arrowPicture.value.style.transform = 'rotate(180deg)'
        } else if(聚焦时){ 
            xxxx  //此处需要手动触发时间组件的失焦事件;
            arrowPicture.value.style.transform = 'rotate(0deg)'
        }
    });
});

由于datepicker组件实例上不支持手动失焦,因为方法1不可行,方法2给出了间接手动失焦的方案。

方法2:方法1的弊端在于箭头仍然作为时间组件的一部分,点击箭头后仍然是聚焦状态,同时组件实例不支持手动失焦。而点击浏览器其他区域时间组件便可失焦,方法2借用了这个点给出间接手动失焦的方案。

原有日历图标通过display:none进行隐藏,箭头开启绝对定位,时间组件开启相对定位。

i {display: none;} // 日历图标隐藏
.date-picker {position: relative} // 时间组件开启相对定位
.arrow-picture{position: absulute;z-index:999} // 箭头开启绝对定位

如此便箭头与时间组件分离,箭头作为其他区域的一部分,点击箭头便相当于点击浏览器其他区域,间接实现时间组件失焦效果。通过间接手动失焦和聚焦,实现时间面板的开合和箭头旋转。

 onMounted(() => {
    // arrowPicture为箭头的dom元素 datePickerDom为时间组件dom元素
    arrowPicture.value.addEventListener('click', () => {
        if (失焦时) {
            datePickerDom.value.focus();
            arrowPicture.value.style.transform = 'rotate(180deg)'
        } else if(聚焦时){ 
            xxxxxx  //此处无需再手动调用失焦函数,click时已经触发手动失焦事件
            arrowPicture.value.style.transform = 'rotate(0deg)'
        }
    });
});

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DatePicker日期选择器图标替换 的相关文章

  • 为任何更新查询增加 Mongoose 文档版本的简单方法?

    我想开始利用 Mongooses 文档版本控制 v key 我在实际增加版本值时遇到了问题 然后我发现您必须添加this increment 执行查询时 有没有办法自动递增 目前 我只是将其添加到pre用于更新类型查询的中间件 module
  • 检测单选按钮/复选框状态的变化

    我需要可靠地检测页面上单选按钮 复选框的状态变化 以便查看表单是否被修改 现在 这是一个完全独立的脚本 我无法修改任何控制表单的内容 目前 我只能看到两种方法 onchange事件处理程序 有助于处理文本框 文本区域和选择 但不会针对复选框
  • 我可以通过什么方式混合 jQuery 和 vanilla JavaScript

    我有一个用普通 JavaScript 编写的 Web 应用程序 我想用 jQuery 动画来增强它 并使用我在各种 jQuery 插件中找到的一些功能 例如上传 http www uploadify com 可以通过什么方式将 jQuery
  • 如何将值发布到输入框中?

    Intro I would like to get the current time after clicking at click and POST the value into input text box Note 假设包含引导样式表
  • 获取被调用的 javascript 文件的查询字符串

    是否可以在调用的 javascript 文件上使用 javascript 获取查询参数 如下所示 in html in file js console log this location query 这是否可能以某种方式实现 或者我必须使用
  • Javascript 对象属性名称

    在 C 中 可以将对象属性的名称作为字符串值获取 名称 对象 Property gt myProperty 这可以在 Javascript Typescript 中完成吗 Object Keys 是我找到的唯一东西 但它给了我所有的键 示例
  • jQuery:查找具有特定自定义属性的元素

    我只想找到具有特定自定义属性值的元素 例如 我想找一个div其具有属性data divNumber 6 var number 6 var myDiv data divNumber number 我尝试使用http api jquery co
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • 以下文档我无法创建 Vue.js 3 的实例

    The code https stackblitz com edit vue ttt file src main js https stackblitz com edit vue ttt file src main js 问题 我正在尝试在
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 正则表达式中连字符的这种用法有效吗?

    NB I only想知道它是否是正则表达式定义中未转义连字符的有效应用 它是not关于匹配电子邮件 连字符或反斜杠的含义 量词或其他任何内容的问题 另外 请注意 链接的答案并没有真正讨论转义 未转义连字符之间的有效性问题 通常我会像这样声明
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • 如何知道 .keyup() 是否是字符键(jQuery)

    如何知道 keyup 是否是字符键 jQuery input keyup function if key is a character such as a b A b c 5 3 2 etc not enter key or shift o
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • 为什么 call 比 apply 快那么多?

    我想知道是否有人知道why call比apply 在 Chrome 中 速度大约快 4 倍 在 Firefox 中快 30 倍 我什至可以制作自定义原型 apply2 在大多数情况下 运行速度是apply 这个想法取自角度 Function
  • React Redux - 在辅助函数中访问现有存储

    我试图在反应组件之外获取存储实例 存储状态 即在单独的辅助函数中 我有我的减速器 我的动作 我在最上面的组件中创建了一个商店 configStore js import createStore from redux import gener
  • onPress 方法中箭头函数与普通函数的行为

    正在学习 Native React 并学习更多关于 javascript 的知识 所以我仍然不明白它的行为的很多事情 我使用 TouchableOpacity 及其 onPress 属性创建了一个按钮组件 为了让它工作 我必须发送我想要执行

随机推荐

  • 【第65篇】行人属性识别研究综述(二)

    文章目录 6 PAR 行人属性识别 算法综述 6 1全局基于图像的模型 6 1 1 ACN iccvw 2015 6 1 2 DeepSAR and DeepMAR ACPR 2015 6 6 1 3 MTCNN TMM 2015 7 6
  • RocketMQ消费重试问题

    异常现象 监控日志展示如下 2019 10 30 14 31 23 339 INFO ConsumeMessageThread 7 com xxx service mq MQConsumerService 93 消费消息 msgId 0A0
  • vue项目总结之配置本地,测试,生产环境api

    最近在做vue项目 想实现通过不同的命令 调用不同环境的api 防止来回切换不同的api出错 例如 npm run dev 调用本地环境 npm run test 调用阿里测试环境api npm run build 调用 生产环境api 先
  • HtmlUnit中form表单提交,提交按钮中的属性没有id、name,解决办法

    HtmlUnit中form表单提交 提交按钮中的属性没有id name 提交按钮的标签也不是
  • del_mysql.sh

    bin bash Athor DT Date 20190718 USERNAME PASSWORD DBNAME HOST 停服 cd 备份 mysqldum u USERNAME p PASSWORD h HOSET aaa R gt b
  • iframe 跳转到其他页面

    也是第一次用这个标签 嵌套其他网站有的跳转了 本以为是自己的问题 百度才得知 是其他网站 有如下代码 if top location self location top location self location 会自动判断当前的loca
  • vue3中使用element-plus表格多选进行回显,分页勾选保存

    获取分页数据 第一页 td value id 10 id 30 id 70 id 80 id 90 根据接口获取会显得数据 const temp2 id 196 deviceId 1 isDelete false id 197 device
  • OpenHarmony仓库大整理 可以指定系统类型下载对应代码

    前言 以前下载OpenHarmony代码的时候 我们都是需要下载全量包 代码量非常大 现在已经有30多G了 而我们如果只是想开发轻量系统 例如润和的Hi3861智能家居开发套件的话 实际上使用不到那么多代码的 很多代码都是小型系统 标准系统
  • Java threadpool机制深入分析

    简介 在前面的一篇文章里我对java threadpool的几种基本应用方法做了个总结 Java的线程池针对不同应用的场景 主要有固定长度类型 可变长度类型以及定时执行等几种 针对这几种类型的创建 java中有一个专门的Executors类
  • new和delete工作机制

    C 中创建堆对象时 我们要使用new delete 那么它们具体做了什么 现在深入讨论 1 new表达式工作步骤 使用new表达式时发生的三个步骤 调用名为operator new的标准库函数来分配足够大的原始的未类型化的堆空间 以保存指定
  • Android 环境搭建,Helloworld以及常见错误处理,最新版哦

    1 下载所需软件1 1 JDK1 6 下载网址 http java sun com javase downloads index jsp1 2 Eclipse3 4 下载网址 http www eclipse org downloads 下
  • 游戏开发unity动画系列:用Animation创建简单动画

    参考 https zhuanlan zhihu com p 141569339
  • vue 中 mapbox 的使用 ,(同一页面进行多次切换操作)

    一 vue 中 引入 mapbox 同一页面进行多次切换操作 1 mapbox的 底图用天地图 1准备工作 安装 mapbox mapbox gl geocoder npm install save mapbox mapbox gl geo
  • mds的 labelIndex 静态预排序

    一般排序是数据 doc resultItem 取出来之后 按某个某个字段的值排序 也就是必须拿到doc resultItem之后才能排序 mds排序的特点是在取resultItem之前就排序 不是对resultItem排序 而是对docId
  • Perl 正则表达式

    正则表达式文中列表 将下一个字符标记为一个特殊字符 或一个原义字符 或一个后向引用 或一个八进制转义符 匹配输入字符串的开始位置 如果设置了 RegExp 对象的Multiline 属性 也匹配 n 或 r 之后的位置 匹配输入字符串的结束
  • 用Virtualbox搭建的ubuntu虚拟机开启与windows的共享文件夹

    一 VirtualBox共享文件夹设置 Virtualbox以共享文件夹的方式提供与真实系统的文件交互 将需要传输的文件放入建立的共享文件夹中将在两个系统中都可以访问 除了开启virtualbox设置中的共享文件夹 对于ubuntu系统还要
  • 网络基础学习:布线、计算机数制

    文章目录 一 双绞线 1 什么是双绞线 2 5类线 3 100Base T 补充 4 双绞线的连接规范 二 光纤概述 1 光纤的特点 2 光纤分类 补充 小结 三 计算机的数制 1 定义 2 数字系统的由来 3 二进制与十进制的转换 一 双
  • idea的使用-常用/快捷键/设置/插件/问题/配置备份-持续更新

    以前编译器都是eclipse最近换到了idea 还不是很习惯 记录下 目录 区别 intelij idea 和 eclipse 使用上的 idea常用快捷键记录 设置 IDEA 默认不折叠代码 IntelliJ IDEA设置自定义autho
  • STM32如何利用串口发送接收数据

    STM32如何利用串口发送接收数据 我现在计划利用STM32F103X的串口对迪文屏发送及接收数据 手中硬件 正点原子开发板 旗舰版 迪文屏 4 3寸 电脑 软件 MCU程序下载 FLYMCU 串口助手 XCOM 迪文屏配置 DGUS TO
  • DatePicker日期选择器图标替换

    实现目标 实现datepicker中的日历图标替换成类似于select选择器组件的箭头 且箭头旋转和时间面板的展开收起相耦合 遇到的问题 点击日历图标不能控制面板的开合动作 datepicker组件实例上通过代码手动聚焦 不支持手动失焦 无