APICloud框架——總結一下最近開發APP遇到的一些問題 (二)


高度自適應

flex布局 允許子元素伸縮

手機號正則

function checkPhone(data){ 
    if(!(/^1[34578]\d{9}$/.test(data))){ 
        alert("手機號碼有誤,請重填");  
        return false; 
    } 
}
function checkTel(data){
    if(!/^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/.test(data)){
        alert('固定電話有誤,請重填');
        return false;
    }
}

db模塊執行sql語句

一句一句執行,不能以;號隔開,否則后面的會不執行

vscode漢化

快捷鍵F1, 輸入Configure Language 回車, 把en改成zh-CN, 保存, 重啟vscode.

格式化時間

new Date().toISOString().match(/(\d{4}-\d{2}-\d{2})/)[1];

創建數據庫操作

  • 創建數據庫
DROP TABLE IF EXISTS addressList; CREATE TABLE addressList(user_id int)
// 如果有addressList這個表就不執行新建命令
  • 設置唯一索引
CREATE UNIQUE INDEX IF NOT EXISTS user_id_idx ON addressList (user_id)
// 在addresslist表中的user_id這個列設置唯一索引user_id_idx

IOS系統下輸入框字體數量

使用onkeup事件有BUG, 如果點擊鍵盤上面的文字輸入到輸入框,onkeyup不會觸發,統計不了字體數量

使用oninput這個事件可以解決這個問題

android和ios行高不兼容

使用js判斷 android比ios大9px

去掉input[type=number]的箭頭

-webkit-appearance:none

git

在使用git的時候,每次執行

#git add *

都會提示這樣一個警告消息:

warning: LF will be replaced by CRLF in XXXXXXXXXXXXXX.

雖然說沒有什么影響吧。

不過就是覺得太礙眼了,

按照這樣設置就沒有問題了:

git config core.autocrlf false
// 禁止自動轉換

這樣設置git的配置后在執行add操作就沒有問題了。

刪除指定字符串

把指定字符串替換成空

str = str.replace('a','')

查找指定字符串是否含有某個子字符串

str.indexOf('aa') == -1
不含有指定字符串
str.indexOf('aa') >=0
含有

slice和splice

slice(start,end);剪切數組
splice(start, howmany, item1, ..., itemX); 方法用於插入、刪除或替換數組的元素。

// start 開始插入/刪除的位置
// howmany 插入/刪除幾項,必須是數字
// item1, ..., itemX 插入的內容, 不傳的時候為刪除

listContact模塊在小米5s下的bug

每個頁面第一次打開listContact列表會出現點擊返回的index不正確, 右邊字母導航也會出現重復

解決方法, 在打開正式有數據的列表之前打開一個空的列表,然后立馬關閉

listContact.open({
    x: -1000,
    y: -1000,
    w: 5,
    h: 5,
    data: [],
    fixedOn: api.frameName
},function(ret,err){
})
listContact.close();

listContact.open({
    // 有數據的列表
})

安卓下第二個bug

  • 設置選中的項, 安卓不起作用

解決辦法: 在設置數據源的時候, 處理以選擇數據

清除角標

api.setAppIconBadge({
    badge: 1
});
// 為0時表示清除

css三角形帶邊框

原理: 寫兩個三角形, 一個覆蓋另一個, 錯開一個像素

 p:after {
    content: "";
    display: inline-block;
    width: 0;
    height: 0;
    border-top: .15rem solid transparent;
    border-right: .22rem solid #fff;
    border-bottom: .15rem solid transparent;
    position: absolute;
    top: .25rem;
    left: -.20rem;
}
 p:before {
    content: "";
    display: inline-block;
    width: 0;
    height: 0;
    border-top: .15rem solid transparent;
    border-right: .22rem solid #E3E3E3;
    border-bottom: .15rem solid transparent;
    position: absolute;
    top: .25rem;
    left: -.22rem;
}

Deferred long-running timer task的問題

Deferred long-running timer task(s) to improve scrolling smoothness. See crbug.com/574343. at frame1.html : 0

延時函數使用不當

ios下創建時間對象

// 處理時間顯示
    function initTime(time) {
        var timeRep = time;
        time=time.replace(/-/g,':').replace(' ',':');
        time=time.split(':');
        var nowTime = new Date();
        var pageTime = new Date(time[0],(time[1]-1),time[2],time[3],time[4],time[5]);
        if ((pageTime.getDate() != nowTime.getDate()) || (pageTime.getFullYear() != nowTime.getFullYear()) || ((pageTime.getMonth()+1) != (nowTime.getMonth()+1))) {
            // 不是今天
            return timeRep;
        } else {
            // 今天
            if (nowTime.getHours() != pageTime.getHours()) {
                return nowTime.getHours() - pageTime.getHours()+ '小時之前'
            } else {
                return nowTime.getMinutes() - pageTime.getMinutes() + '分鍾之前'
            }
        }
    }

長按事件

var timeOutEvent=0;//定時器   
		//開始按   
		function gtouchstart(ele){
			var e = window.event
			var x = e.touches[0].pageX,y=e.touches[0].pageY
		    timeOutEvent = setTimeout("longPress("+x+","+y+")",500);//這里設置定時器,定義長按500毫秒觸發長按事件,時間可以自己改,個人感覺500毫秒非常合適   
		    return false;   
		};   
		//手釋放,如果在500毫秒內就釋放,則取消長按事件,此時可以執行onclick應該執行的事件   
		function gtouchend(){   
		    clearTimeout(timeOutEvent);//清除定時器   
		    if(timeOutEvent!=0){   
		        //這里寫要執行的內容(尤如onclick事件)   
		    }   
		    return false;   
		};   
		//如果手指有移動,則取消所有事件,此時說明用戶只是要移動而不是長按   
		function gtouchmove(){   
		    clearTimeout(timeOutEvent);//清除定時器   
		    timeOutEvent = 0;   
		      
		};   
		//真正長按后應該執行的內容   
		function longPress(x,y){
		    timeOutEvent = 0; 
		    $api.css($api.dom('.shadow'), 'display:inline-block;top:' + y + 'px;left:' + x + 'px;');
		    //執行長按要執行的內容,如彈出菜單   
		    console.log("長按事件觸發發");   
		}   

兩次往數據庫插入同一條數據

  1. 首先查詢數據所在的行(需要有一個唯一索引)
  2. 如果有數據就更新數據
    UPDATE 表名 SET 列名 = 數據,列2 = 數據2 WHERE 唯一索引 = 索引
  1. 沒有該數據就插入
    INSERT OR REPLACE INTO 表名(列名1, 列名2, 列名3, 列名14)  VALUES (值1, 值2 ...)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM