当前位置: 首页 > news >正文

el-input中show-password密码提示功能去掉

el-input中show-password密码提示功能去掉

  • 一、效果图
  • 二、封装个组件
  • 三、如何使用

一、效果图

在这里插入图片描述

二、封装个组件

<template><divclass="el-password el-input":class="[size ? 'el-input--' + size : '', { 'is-disabled': disabled }]"><inputclass="el-input__inner":placeholder="placeholder"ref="input":style="{ paddingRight: padding + 'px' }":disabled="disabled":readonly="readonly"@focus="handleFocus"@blur="handleBlur"@input="handleInput"@change="change"@compositionstart="handleCompositionStart"@compositionend="handleCompositionEnd"/><div class="tools"><iv-if="clearable !== false"v-show="pwd !== '' && isfocus"@mousedown.preventclass="el-input__icon el-icon-circle-close el-input__clear"@click="clearValue"></i><iv-if="showPassword !== false"v-show="pwd !== '' || isfocus"class="el-input__icon el-icon-view el-input__clear"@click="changePasswordShow"></i></div></div>
</template>
<script>
import emitter from 'element-ui/src/mixins/emitter';
//自定义密码输入框//input元素光标操作
class CursorPosition {constructor(_inputEl) {this._inputEl = _inputEl;}//获取光标的位置 前,后,以及中间字符get() {var rangeData = { text: '', start: 0, end: 0 };if (this._inputEl.setSelectionRange) {// W3Cthis._inputEl.focus();rangeData.start = this._inputEl.selectionStart;rangeData.end = this._inputEl.selectionEnd;rangeData.text =rangeData.start != rangeData.end? this._inputEl.value.substring(rangeData.start, rangeData.end): '';} else if (document.selection) {// IEthis._inputEl.focus();var i,oS = document.selection.createRange(),oR = document.body.createTextRange();oR.moveToElementText(this._inputEl);rangeData.text = oS.text;rangeData.bookmark = oS.getBookmark();for (i = 0;oR.compareEndPoints('StartToStart', oS) < 0 && oS.moveStart('character', -1) !== 0;i++) {if (this._inputEl.value.charAt(i) == '\r') {i++;}}rangeData.start = i;rangeData.end = rangeData.text.length + rangeData.start;}return rangeData;}//写入光标的位置set(rangeData) {var oR;if (!rangeData) {console.warn('You must get cursor position first.');}this._inputEl.focus();if (this._inputEl.setSelectionRange) {//  W3Cthis._inputEl.setSelectionRange(rangeData.start, rangeData.end);} else if (this._inputEl.createTextRange) {// IEoR = this._inputEl.createTextRange();if (this._inputEl.value.length === rangeData.start) {oR.collapse(false);oR.select();} else {oR.moveToBookmark(rangeData.bookmark);oR.select();}}}
}
export default {name: 'el-password',props: {value: { default: '' },size: { type: String, default: '' },placeholder: { type: String, default: '请输入' },disabled: { type: [Boolean, String], default: false },readonly: { type: [Boolean, String], default: false },clearable: { type: [Boolean, String], default: false },showPassword: { type: [Boolean, String], default: false },},data() {return {symbol: '●', //自定义的密码符号pwd: '', //密码明文数据padding: 15,show: false,isfocus: false,inputEl: null, //input元素isComposing: false, //输入框是否还在输入(记录输入框输入的是虚拟文本还是已确定文本)};},mounted() {this.inputEl = this.$refs.input;this.pwd = this.value;this.inputDataConversion(this.pwd);},mixins: [emitter],watch: {value: {handler: function (value) {if (this.inputEl) {this.pwd = value;this.inputDataConversion(this.pwd);}},},showPassword: {handler: function (value) {let padding = 15;if (value) {padding += 18;}if (this.clearable) {padding += 18;}this.padding = padding;},immediate: true,},clearable: {handler: function (value) {let padding = 15;if (value) {padding += 18;}if (this.showPassword) {padding += 18;}this.padding = padding;},immediate: true,},},methods: {select() {this.$refs.input.select();},focus() {this.$refs.input.focus();},blur() {this.$refs.input.blur();},handleFocus(event) {this.isfocus = true;this.$emit('focus', event);},handleBlur(event) {this.isfocus = false;this.$emit('blur', event);//校验表单this.dispatch('ElFormItem', 'el.form.blur', [this.value]);},change(...args) {this.$emit('change', ...args);},clearValue() {this.pwd = '';this.inputEl.value = '';this.$emit('input', '');this.$emit('change', '');this.$emit('clear');this.$refs.input.focus();},changePasswordShow() {this.show = !this.show;this.inputDataConversion(this.pwd);this.$refs.input.focus();},inputDataConversion(value) {//输入框里的数据转换,将123转为●●●if (!value) {this.inputEl.value = '';return;}let data = '';for (let i = 0; i < value.length; i++) {data += this.symbol;}//使用元素的dataset属性来存储和访问自定义数据-*属性 (存储转换前数据)this.inputEl.dataset.value = this.pwd;this.inputEl.value = this.show ? this.pwd : data;},pwdSetData(positionIndex, value) {//写入原始数据let _pwd = value.split(this.symbol).join('');if (_pwd) {let index = this.pwd.length - (value.length - positionIndex.end);this.pwd =this.pwd.slice(0, positionIndex.end - _pwd.length) + _pwd + this.pwd.slice(index);} else {this.pwd =this.pwd.slice(0, positionIndex.end) +this.pwd.slice(positionIndex.end + this.pwd.length - value.length);}},handleInput(e) {//输入值变化后执行 //撰写期间不应发出输入if (this.isComposing) return;let cursorPosition = new CursorPosition(this.inputEl);let positionIndex = cursorPosition.get();let value = e.target.value;//整个输入框的值if (this.show) {this.pwd = value;} else {this.pwdSetData(positionIndex, value);this.inputDataConversion(value);}cursorPosition.set(positionIndex, this.inputEl);this.$emit('input', this.pwd);},handleCompositionStart() {//表示正在写this.isComposing = true;},handleCompositionEnd(e) {if (this.isComposing) {this.isComposing = false;//handleCompositionEnd比handleInput后执行,避免isComposing还为true时handleInput无法执行正确逻辑this.handleInput(e);}},},
};
</script>
<style scoped>
.tools {position: absolute;right: 5px;display: flex;align-items: center;top: 0;height: 100%;z-index: 1;
}
</style>

三、如何使用

// An highlighted block
import elPassword from '@/components/elPassword.vue';components: {elPassword,
},<el-passwordshow-passwordv-model="formData.password1"placeholder="新密码"
></el-password>

结束啦~~~~
在这里插入图片描述

链接: https://www.jb51.net/javascript/318001fxj.htm

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 续航更进阶 长安马自达MAZDA EZ-6成功挑战1301公里续航
  • zipkin启动发生报错 : Failed to start bean ‘armeriaServerGracefulShutdownLifecycle‘;
  • 在Mac电脑安装Homebrew并且配置环境变量
  • RabbitMQ练习(Publish/Subscribe)
  • 【ragflow】查看Docker >= 24.0.0 Docker Compose >= v2.26.1是否满足
  • Linux文件IO缓存
  • 使用cephadm工具在ubuntu2004系统中安装ceph 16.2.7指定版本单点集群
  • 应用程序启动配置方式
  • 深度学习系列71:表格检测和识别
  • C语言:编译与链接
  • C++基础面试题 | C++中的move有什么作用,它的原理是什么?
  • Linux驱动开发基础(中断)
  • 政策|十部门印发《数字化绿色化协同转型发展实施指南》
  • Prompt-to-prompt image editing with cross attention control
  • 五种多目标优化算法(NSGA3、MOPSO、MOGWO、NGSA2、SPEA2)性能对比,包含47个多目标测试函数,6种评价指标,MATLAB代码
  • 《Java编程思想》读书笔记-对象导论
  • 0x05 Python数据分析,Anaconda八斩刀
  • Centos6.8 使用rpm安装mysql5.7
  • jQuery(一)
  • mockjs让前端开发独立于后端
  • php ci框架整合银盛支付
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Solarized Scheme
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Web设计流程优化:网页效果图设计新思路
  • 分享几个不错的工具
  • 构建二叉树进行数值数组的去重及优化
  • 如何选择开源的机器学习框架?
  • 听说你叫Java(二)–Servlet请求
  • 鱼骨图 - 如何绘制?
  • 原生Ajax
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 中文输入法与React文本输入框的问题与解决方案
  • (2)MFC+openGL单文档框架glFrame
  • (4)logging(日志模块)
  • (LeetCode 49)Anagrams
  • (windows2012共享文件夹和防火墙设置
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)计算机毕业设计高校学生选课系统
  • (回溯) LeetCode 77. 组合
  • (剑指Offer)面试题34:丑数
  • (十三)Flink SQL
  • (学习日记)2024.01.19
  • (一一四)第九章编程练习
  • (转载)利用webkit抓取动态网页和链接
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .net core 6 集成和使用 mongodb
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .net 使用ajax控件后如何调用前端脚本
  • .NET 使用配置文件
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .Net--CLS,CTS,CLI,BCL,FCL