详解小程序输入框闪烁及重影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 相关文章推荐
asp.net HttpHandler实现图片防盗链
Nov 09 Javascript
json格式的时间显示为正常年月日的方法
Sep 08 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
Dec 12 Javascript
js中遍历对象的属性和值的方法
Jul 27 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
javascript如何创建对象
Aug 29 Javascript
AngularJS+Bootstrap实现多文件上传与管理
Nov 08 Javascript
thinkjs之页面跳转同步异步操作
Feb 05 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
详解webpack loader和plugin编写
Oct 12 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 Javascript
JS使用正则表达式提交页面验证的代码
Oct 16 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
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
提升PHP执行速度全攻略(下)
2006/10/09 PHP
杏林同学录(九)
2006/10/09 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
Laravel实现构造函数自动依赖注入的方法
2016/03/16 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
JavaScript 学习笔记(十二) dom
2010/01/21 Javascript
javascript算法学习(直接插入排序)
2011/04/12 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
python实现电子词典
2020/04/23 Python
Python 字典dict使用介绍
2014/11/30 Python
python魔法方法-自定义序列详解
2016/07/21 Python
python3.x上post发送json数据
2018/03/04 Python
Django如何自定义分页
2018/09/25 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
荷兰优雅女装网上商店:Heine
2016/11/14 全球购物
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
志愿者活动总结范文
2014/04/26 职场文书
小学运动会宣传稿
2015/07/23 职场文书
董事长致辞
2015/07/29 职场文书
mongodb的安装和开机自启动详细讲解
2021/08/02 MongoDB
使用refresh_token实现无感刷新页面
2022/04/26 Javascript