不知道怎麼描述標題,先看截圖吧,大致的效果就是一個框輸入一位密碼。
最開始實現的思路是一個小方框就是一個type為password的input,每輸入一位自動跳到下一位,刪除一位就自動跳到前一位,android上是OK的,很平滑也沒有bug,但是ios上會出現鍵盤頻繁調起和關閉,非常影響使用者體驗。原因估計是每個input會持續的focus和blur,每次focus會調起鍵盤,blur又會關掉鍵盤,so....此方案肯定不行了。
PM非要實現這種效果,木有辦法~拗不過,一句用戶體驗不好會讓你沒話說,誰要咱是前端呢~拗不過就找解決方案吧。
既然多個是頻繁focus和blur導致的問題,又必須是密碼框,那何不就用一個input框來輸入呢,小方框就用別的方式模擬,開乾。這是最後的效果:http://jsbin.com/neqesiqogu/edit?html,css,js,output
以下是實現的樣式:
JavaScript Code複製內容到剪貼簿
- .pwd-box{
- width:310px;
- padding-left: 1px;
- position: relative;
- border: 1px solid #9f9fa0;
- border-radius: 3px;
- }
-
.pwd-box input[type="tel"]{
- width: 99%;
- height: 45px;
- color: transparent;
- position: absolute;
- top: 0;
- left: 0;
- border: none;
- font-size: 18px;
- opacity: 0;
- z-index: 1;
- letter-spacing: 35px;
- }
- .fake-box input{
- width: 44px;
- height: 48px;
- border: none;
- border-right: 1px solid #e5e5e5;
- text-align: center;
- font-size: 30px;
- }
- .fake-box input:nth-last-child(1){
- border:none;
- }
-
.pwd-box .pwd-input:focus{
- left:-1000px;
- top: -100px;
- }
JavaScript Code複製內容到剪貼簿
- var $input = $(".fake-box input");
-
$("#pwd-input").on("input",関数() {
-
var pwd = $(this).val().trim();
-
for (var i = 0, len = pwd.length; i < len; i ) {
-
$input.eq("" i "").val(pwd[i]);
- }
-
$input.each(function() {
-
var index = $(this).index();
-
if (index >= len) {
-
$(this).val("");
- }
- });
-
if (len == 6) {
-
self.sendPackage(pwd);
- }
- });
の主な考え方は、真の暗号フレームの入力によって、暗号フレーム内のコンテンツが変更されることです。
その効果は実現せず、問題は思考回路であり、この死の互換性を備えており、その効果を達成するときにIOSに起動された光マークがあり、Androidが存在せず、その後、一連の方法で光マークを取り除き、フォーカス時の設定テキストと比較します-インデント、カラー配置透明等等,但都無济事,後播放淘宝有一办法是フォーカス時候ハ密コード框丢到一边去,因外层有オーバーフロー非表示,完美解决了问题~
以上のバージョンの移動 Web モジュール クライアントは、多方框入力秘密コード効果を実現します。 >
翻訳地址:
http://www.cnblogs.com/hutuzhu/p/5000024.html