移動端開發(使用webuploader上傳圖片,客戶端交互,修改alert彈窗等)

以前實習作的一個移動端的頁面 須要的功能有圖片上傳 點擊客戶端的返回按鈕 有提示(即與客戶端有交互) 遇到很多的坑 總結一下問題html

1.圖片上傳功能  使用工具 百度的webuploader

暫時遇到的坑前端

1.1  刪除圖片 實際上並無徹底刪除 須要本身在源碼上添加

詳情 看github的提問  https://github.com/fex-team/webuploader/issues/594ios

1.2 上傳的圖片 旋轉角度有問題 好比 在上傳頁面看的圖片縮略圖 是水平顯示的 但上傳到後臺 顯示的是豎着的

詳情可看  https://github.com/fex-team/webuploader/issues/476git

文中做者有說到  這個須要和後臺配合實現 由於若是在前端實現 會增長負擔github

(遇到這狀況 就多多拜託後臺哥哥吧web

1.3 使用fastclick後 若是點擊屏幕過快 會沒法激活上傳功能

這個是我發現最大的坑 可能也不關這個插件的事 由於不用fastclick的狀況 是能夠正常使用的app

但在網上找了不少文章 都沒有找到解決方法 最後 只能使用最蠢的方式來解決框架

正常狀況 激活fastclick最直接粗暴的方式是函數

window.addEventListener('load', function() {
  FastClick.attach(document.body);
}, false);

問題就出如今 fastclick激活的區域是整個body 那麼嘗試一下工具

不綁定webuploader的上傳按鈕 會如何呢?

https://github.com/ftlabs/fastclick

fastclick的github上有一處 是忽略激活的

但我給嘗試了以後 發現並無做用

最後用最蠢的方式是 獲取各個須要清除300ms的元素 而後再一一激活fastclick

(這實在是太蠢了 但目前我是想不出好方法 只能這樣將就用着了

1.4 暫未解決的坑

webuploader  在安卓機子上使用上傳圖片的時候 不能一次性選擇多張圖片(可能須要安卓客戶端那邊幫忙 暫未找到解決方法

ios 上 點擊上傳圖片按鈕 會有300ms延遲 (就算以前使用了fastclick激活整個body也會存在)

PS:其實最可怕的狀況是 webuploader的git 很久沒更新了  (好可怕。。

 

2.與客戶端交互

由於這個頁面是嵌在APP裏面打開的

有個功能是 用戶輸入了內容的時候 點擊APP左上角的返回按鈕 跳出一個提示框來提示用戶是否返回

使用的工具是 webviewJavascriptBridge

附上github地址 https://github.com/marcuswestin/WebViewJavascriptBridge

寫好一個function 而後客戶端調用

而後與客戶端交互的方式是經過修改 document.location 來告知客戶端 而後客戶端來進行判斷 (這方法有點蠢 求大神告知更好的方法

到這裏就會出現一個問題了

(彈窗用的是系統自帶的alert和confirm彈窗 緣由是若是用div模擬的彈窗 能控制的範圍只有在頁面部位

例如 div的模擬彈窗 後面再用一個遮罩層 阻擋用戶的其餘操做 能阻擋的只有頁面範圍內

但頭頂的原生app按鈕 並不能阻擋 無奈使用系統的alert彈窗)

2.1 ios的彈窗 會出現網址

例如

解決方法 (去除移動端alert confirm的網址(url))http://blog.5ibc.net/p/21287.html

好了 網址不顯示了 可是! 我用的返回框是confirm彈窗啊!

有肯定 和 取消 兩個按鈕 而後根據用戶點擊哪一個做出操做啊!

可是這個方法的彈窗 是用iframe 點擊完以後就消失! 根本不能判斷

因此 我又本身修改了一下confirm的寫法

2.2 修改confirm彈窗

紅色爲本身添加
由於這個重寫的confirm是在一個框架裏面的 反應後就馬上取消
因此不能經過它來判斷
須要在裏面添加判斷
var wConfirm = window.confirm;
window.confirm = function (message,trueFn,flaseFn) {
    try {
        var iframe = document.createElement("IFRAME");
        iframe.style.display = "none";
        iframe.setAttribute("src", 'data:text/plain,');
        document.documentElement.appendChild(iframe);
        var alertFrame = window.frames[0];
        var iwindow = alertFrame.window;
        if (iwindow == undefined) {
            iwindow = alertFrame.contentWindow;
        }
        var result = iwindow.confirm(message);
    if(result){
      trueFn();
        } else{
          flaseFn();
        }
        iframe.parentNode.removeChild(iframe);
    }
    catch (exc) {
        return wConfirm(message);
    }
}

3.由上面的alert彈窗 衍生而出的問題

項目中遇到 

在 ios中 alert彈窗會先執行
 
例如 
alert(1);
console.log(2);
alert(3);
 
ios會先彈出1 而後彈出3 最後才輸出2
 
因此就會遇到一些狀況
在alert語句前 原本是想讓某些元素隱藏 或者 改變樣式
但實際上ios會先彈出alert窗 但想改變的元素並尚未改變樣式
只會在點擊alert窗後纔會執行
 
很蛋疼對不對?!
解決方法以下!!!!
將alert彈出的語句放在setTimeout裏面
setTimeout(function(){
    alert(3);
},0)
 
原理是 setTimeout會在js空閒以後纔會執行裏面的函數
因此把彈窗放進裏面 就能確保alert以前的語句都執行完畢了(不知道說得對不對 這是由我本身總結出來的 若錯誤 求輕噴)

4.安卓手機 軟鍵盤彈出 會形成頁面被壓縮

例如 作個整屏的頁面(就是高度是整個手機屏幕 沒有滾動的)

底部有一系列的工具欄(通常的作法是用絕對定位固定到底部)

若是這時候 頁面有input輸入框 在部分手機上 軟鍵盤彈出來後

固定到底部的元素會忽然冒上來

從網上隨便找的兩張圖片

     

形成的緣由 我猜測是 軟鍵盤彈出來後 頁面的高度就瞬間被減去了軟鍵盤的高度 致使以body定位的元素 出現差錯

解決方法!!!!

進入頁面以後 設置body的高度爲整個手機高度

那麼彈出軟鍵盤後 也不會被減去高度了

5. 聯動選擇框

策劃要求弄個能夠上下滑動的選擇框

例如這樣

單純select確定是知足不了的 要臨時本身寫一個?可是又太難寫不出來?

推薦一個 https://github.com/tianxiangbing/mobile-select-area

這個可能和不少人的實際開發有點出入 可是本身再修修改改仍是能用的

相關文章
相關標籤/搜索