详解小程序输入框闪烁及重影BUG解决方案


Posted in Javascript onAugust 31, 2018

前言

本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的。

问题描述

在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标闪烁的BUG。

原因

造成这个BUG的原因,是因为在原生小程序input组件上,进行了封装。才导致光标闪烁的问题。

解决方案

这里提供了两种解决方案。各有各的优势,请选取合适的方案:

一、弃用v-model,使用@input

适用于input组件单纯是用户手动输入的,而没有像授权获取手机号,然后自动填入input组件中。这种需要赋予初始value的情况。即适用于单向绑定,而不是双向绑定。

/** 
* 父组件
*/

// html
<childInput @input="onInput"/> <-- 注意这里不能使用:value=value赋予初始值,否则又会出现闪烁的BUG,因为此时就等同于v-model了

// js
import ChildInput from './ChildInput'
export default {
 components:{ ChildInput },
 data(){
 return {
  value:''
 }
 },
 methods(){
 onInput(e){
  this.value = e 
 }
 }
}

/** 
* 子组件 ChildInput
*/

// html

<input @input="$emit('input',$event)"/>

二、不封装input组件,直接使用v-model

这种情况就是可以直接双向绑定的了。具体原因还不清楚,可能是本身原生小程序的BUG。

/**
* 父组件,不使用封装的子组件,直接使用原生组件。
*/

// html
<input v-model="value"/>

// js
export default {
 data(){
 return {
  value:''
 }
 }
}

问题描述:输入框文字出现重影,如下

详解小程序输入框闪烁及重影BUG解决方案

输入框 在失去焦点和获得焦点的切换过程中,能清晰的看到输入框的问题的重影现象,如上图,经过一番折腾,我找到bug的出错原因即初步解决方案,仅供参考

1、微信官方设计文档给出了字体大小的规范,最小11pt,我自己设的是10pt,将其改成11pt之后,部分输入框不再出现重影,而是微信官方渲染的加粗效果

微信官方字体规范如下:

详解小程序输入框闪烁及重影BUG解决方案

修改后的加粗效果如下:

详解小程序输入框闪烁及重影BUG解决方案

3、还有的输入框扔会出现重影,细看,再继续研究,发现是因为,flex布局,使得,输入框的长度不一致,我把输入框调成一样宽度就可以,不过我也不知道具体为什么,你们可以试试

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jQuery的一个扩展form序列化到json对象
Dec 09 Javascript
有关于JS构造函数的重载和工厂方法
Apr 07 Javascript
使用javascript实现监控视频播放并打印日志
Jan 05 Javascript
js实现同一页面多个运动效果的方法
Apr 10 Javascript
JavaScript中的substr()方法使用详解
Jun 06 Javascript
js通过指定下标或指定元素进行删除数组的实例
Jan 12 Javascript
B/S(Web)实时通讯解决方案分享
Apr 06 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
Jun 23 Javascript
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
vue axios post发送复杂对象问题
Jun 04 Javascript
简单了解JavaScript arguement原理及作用
May 28 Javascript
JS中队列和双端队列实现及应用详解
Sep 29 Javascript
javascript闭包的使用之按钮切换功能
Aug 30 #Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 #Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 #Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 #Javascript
vue-router动态设置页面title的实例讲解
Aug 30 #Javascript
解决vue select当前value没有更新到vue对象属性的问题
Aug 30 #Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 #Javascript
You might like
PHP MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
基于jQuery的history历史记录插件
2010/12/11 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
2013/11/28 Javascript
js中this的用法实例分析
2015/01/10 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
请不要重复犯我在学习Python和Linux系统上的错误
2016/12/12 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
transform python环境快速配置方法
2018/09/27 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
浅谈Python中eval的强大与危害
2019/03/13 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
python绘制趋势图的示例
2020/09/17 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
小学综治宣传月活动总结
2014/07/02 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
亲属关系公证书样本
2015/01/23 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript