灵光乍现 解决移动端保持键盘打开状态

之前看到问题 小程序点击发送保持键盘打开状态 按常规答了一下

点击按钮 的处理,最后 让输入框重新获取焦点,应该就可以
小程序里 应该是有个 focus 属性,去查下文档吧

昨天看到消息提示,有人回复,去瞟了一眼
关于界面闪烁,这就是个老问题,一直也没有什么解决方法

稍稍想一想,刚准备抛到脑后,继续工作,突然间 灵光乍现
这问题的解决方案就是个 脑筋急转弯

1. 弹出键盘的原因是输入控件获得焦点,系统认为用户需要输入
2. 键盘收起的原因是输入控件失去焦点,系统认为用户不需要输入了

我们用的发送按钮,是个控件,但不是输入控件
点击后,原输入控件失去焦点,获得焦点的是个非输入控件,键盘收起

这里先思考一个问题:

如果从 焦点从A输入控件 跳到 B输入控件,键盘是不是就不会收起
其实不用试,肯定不收起,不然这样闪来闪去的一定会被测试打回来的

提示都已经写到这么明显了,各位灵光乍现了没 ^_^

解决方案就是:用 CSS 把输入控件做成按钮的样子

当然还有细节需要处理,但是闪烁这个大问题是圆满解决了。

主要的一个细节问题:输入控件的光标闪烁
按钮要有按钮的样子,获取焦点后有个闪烁光标总是不合时宜的
解决方案异常简单,把焦点再重置到原输入控件

关于按钮样式,鼠标事件响应及UI反馈这种小问题,大家自己搞定吧

下面是基本实现,供参考

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
    <title>Wechat Input Focus</title>
    <style type="text/css">
    html, body {margin:0;padding:0;}
    body {min-height:100vh;}
    .grid {border-collapse:collapse;width:100%;font-size:24px;box-sizing:border-box;}
    .grid td {font:inherit;}
    .grid td.max {width:100%;}
    .grid td.min {width:1px;white-space:nowrap;}
    .grid td input {font:inherit;}
    .grid td .text {width:100%;padding:0 0.5em;border:1px solid #999;box-sizing:border-box;}
    .grid td .txt-send {width:4em;padding:0 0.5em;text-align:center;border:1px solid #999;box-sizing:border-box;background-color:#CCC;}
    </style>
    <script>
    document.addEventListener('DOMContentLoaded', function(){

        let domText = document.querySelector('.text');
        let domTxtSend = document.querySelector('.txt-send');

        let domSendData = document.querySelector('.send-data');

        domTxtSend.addEventListener('focus', function($evt){

            domText.focus();

            let dom = document.createElement('DIV');
            dom.innerHTML = '&gt;&ensp;' + domText.value;

            domSendData.appendChild(dom);

            domText.value = '';
        });
    });
    </script>
</head>
<body>
<table class="grid">
    <tr>
        <td class="max"><input type="text" class="text" placeholder="请输入内容"/></td>
        <td class="min">
            <input type="text" class="button txt-send" readonly="readonly" value="发送"/>
        </td>
    </tr>
</table>
<div class="send-data"></div>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.版本 2 .如果真 (ItemID = 3020164) item.Name = “[特魂]召雷术” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020079) item.Name = “[特魂]毕工淌” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020116) item.Name = “[特魂]魂燃一线” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020124) item.Name = “[特魂]抽芯补天” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020156) item.Name = “[特魂]续命术” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020151) item.Name = “[特魂]灵光” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020150) item.Name = “[特魂]万夫莫敌·0重” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020157) item.Name = “[特魂]炼丹术·0重” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020131) item.Name = “[特魂]吐纳术” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020114) item.Name = “[特魂]天赐·安神” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020072) item.Name = “[特魂]地堂霸脚” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020073) item.Name = “[特魂]凌波” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020074) item.Name = “[特魂]完璧” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020075) item.Name = “[特魂]光佑” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020076) item.Name = “[特魂]壁虎游墙” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020077) item.Name = “[特魂]猫足” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020078) item.Name = “[特魂]虚影步” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020155) item.Name = “[特魂]吸星术” item.Color = Color_3 返回 (item)翻译成c++源码
最新发布
05-24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值