摘要:可以是數字或者是字符串如果是數字則表示屬性名前加上空格符號的數量,如果是字符串,則直接在屬性名前加上該字符串。
最后更新于2019年1月13日
前端常用代碼片段(一) 點這里
前端常用代碼片段(二) 點這里
前端常用代碼片段(三) 點這里
前端常用代碼片段(四) 點這里
前端常用代碼片段(五) 點這里
前端常用代碼片段(六) 點這里
function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1) + min) } export function shuffle(arr) { let _arr = arr.slice() for (let i = 0; i < _arr.length; i++) { let j = getRandomInt(0, i) let t = _arr[i] _arr[i] = _arr[j] _arr[j] = t } return _arr }
擴展:
1.取[10,100) 的隨機整數方法Math.floor(Math.random()*90+10);2.取[10,100] 的隨機整數方法
function randomBy(under, over){ switch(arguments.length){ case 1: return parseInt(Math.random()*under+1); case 2: return parseInt(Math.random()*(over-under+1) + under); default: return 0; } } randomBy(10, 100);
//隨機返回一個范圍的數字 randomNumber(n1, n2) { //randomNumber(5,10) //返回5-10的隨機整數,包括5,10 if (arguments.length === 2) { return Math.round(n1 + Math.random() * (n2 - n1)); } //randomNumber(10) //返回0-10的隨機整數,包括0,10 else if (arguments.length === 1) { return Math.round(Math.random() * n1) } //randomNumber() //返回0-255的隨機整數,包括0,255 else { return Math.round(Math.random() * 255) } }3.利用sort()
我們先產生個數組
var arr=[]; for(var i=0;i<10;i++){ arr.push(i) } console.log(arr) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
我們以前的正常排序是這樣的:
arr.sort(function(a,b){ return b-a });
接下來我們來打亂它:
arr.sort(()=>{ return Math.random() - 0.5 }) // [1, 0, 2, 3, 4, 6, 8, 5, 7, 9]
第二種打亂方法:
arr.sort((a,b)=>{ return a > Math.random()*10; }) // [1, 2, 0, 6, 4, 3, 8, 9, 7, 5]
解析:
先說正常的排序:2.函數節流(throttle)和 函數去抖(debounce)
a,b表示數組中的任意兩個元素,若return > 0 ,b前a后;若reutrn < 0 則a前b后;當a=b時,則存在瀏覽器兼容 ;
a-b輸出從小到大排序,b-a輸出從大到小排序。
然后再說我們打亂的方法:
創建數組不用說,接下來就是用js的sort方法 來實現,Math.random()實現一個隨機0-1之間的小數 然后再減去0.5,這時就會根據return比較后得到的值排序,所以說就會生成不是正常從大到小或者從小到大的排序。
函數節流 和 函數去抖 都是為了項目優化而出現的,官方是沒有具體定義的,他們的出現主要是為了解決一些短時間內連續執行的事件帶來性能上的不佳和內存的消耗巨大等問題;像這類事件一般像 scroll keyup mousemove resize等等,短時間內不斷的觸發,在性能上消耗是非常大的,尤其是一些改變DOM結構的操作;
節流[throttle]與防抖[debounce]非常相似,都是讓上述這類事件里定義的代碼 從不斷的執行 更改成為 規定的時間內執行多少次;
函數節流(throttle) 應用場景函數節流(throttle),例如實現一個拖拽功能,需要一路監聽 mousemove 事件,在回調中獲取元素當前位置,然后重置 dom 的位置(樣式改變)。如果我們不加以控制,每移動一定像素而觸發的回調數量是會非常驚人的,回調中又伴隨著 DOM 操作,繼而引發瀏覽器的重排與重繪,性能差的瀏覽器可能就會直接假死,這樣的用戶體驗是非常糟糕的。我們需要做的是降低觸發回調的頻率,比如讓它 500ms 觸發一次,或者 1000ms,這個閾值不能太大,太大了拖拽就會失真,也不能太小,太小了低版本瀏覽器可能就會假死,這樣的解決方案就是函數節流。函數節流的核心是,讓一個函數不要執行得太頻繁,減少一些過快的調用來節流。
函數節流有哪些應用場景?哪些時候我們需要間隔一定時間觸發回調來控制函數調用頻率?
DOM 元素的拖拽功能實現(mousemove)
射擊游戲的 mousedown/keydown 事件(單位時間只能發射一顆子彈)
計算鼠標移動的距離(mousemove)
Canvas 模擬畫板功能(mousemove)
搜索聯想(keyup)
監聽滾動事件判斷是否到頁面底部自動加載更多:給 scroll 加了 debounce 后,只有用戶停止滾動后,才會判斷是否到了頁面底部;如果是 throttle 的話,只要頁面滾動就會間隔一段時間判斷一次
節流通俗來解釋就比如我們水龍頭放水,閥門一打開,水嘩嘩的往下流,這個秉著勤儉節約的優良傳統美德,我們要把水龍頭關小點,最好是如我們心意按照一定規律在某個時間間隔內一滴一滴的往下滴,這,,,好吧這就是我們節流的概念;換成函數來說,使用setTimeout方法,給定兩個時間,后面的時間減去前面的時間,到達我們給定的時間就去觸發一次這個事件,這么說太籠統的,我們看下面的函數,這里我們以【scroll】為例;
/** 樣式我就順便寫了 **/ ------------------------ /** 先給定DOM結構;**/------------------------ /**主要看js,為了簡單我用JQ去寫了**/
或
export function throttle(delay, action){ let last = return function(){ let curr = +new Date() if (curr - last > delay){ action.apply(this, arguments) last = curr } } }函數去抖(debounce) 應用場景
寫代碼之前,我們先清楚一下防抖的概念,不知道大家有沒有做過電腦端兩邊懸浮廣告窗口的這么一個東西,當我們拖動滾動條的時候,兩邊的廣告窗口會因為滾動條的拖動,而不斷的嘗試著去居于中間,然后你就會看到這兩個窗口,不停的抖啊抖;
一般這種就叫抖動了,我們要做的就是防止這種抖動,稱為防抖[debounce ];
那這里防抖思想就是當我們拖動完成之后,兩邊的窗口位置再重新去計算,這樣,就會顯得很平滑,看著很舒服了,最主要的操作DOM結構的次數就大大減少了;
優化了頁面性能,降低了內存消耗,不然你像IE這種比較老點版本的瀏覽器,說不定就直接給你蹦了
用書面一點的說法就是,在某個事件沒有結束之前,函數不會執行,當結束之后,我們給定延時時間,然他在給定的延時時間之后再去執行這個函數,這就是防抖函數;
來看代碼:
//將上面案例的throttle函數替換為debounce函數; function debounce(method,time){ var timer = null ; return function(){ var context = this; //在函數執行的時候先清除timer定時器; clearTimeout(timer); timer = setTimeout(function(){ method.call(context); },time); } }
思路就是在函數執行之前,我們先清除定時器,如果函數一直執行,就會不斷的去清除定時器中的方法,知道我們操作結束之后,函數才會執行;
或
export function debounce(func, delay) { let timer return function(...args) { if (timer) { clearTimeout(timer) } timer = setTimeout(() => { func.apply(this, args) }, delay) } }
用途
當我們做keyup像后臺請求檢驗的時候,可以使用防抖函數,不然我們每按一次鍵盤就請求一次,請求太頻繁,這樣當我們結束按鍵盤的時候再去請求,請求少很多了,性能自然不用說;
resize 窗口大小調整的時候,我們可以采用防抖技術也可以使用節流;
mousemove 鼠標移動事件我們既可以采用防抖也可以使用節流;
scroll 滾動條觸發的事件,當然既可以采用防抖也可以采用節流;
連續高頻發的事件都可以采用這兩種方式去解決,優化頁面性能;
具體的采用哪一種更較為合適,主要還是看你的業務需求
區分
節流說白了就是每ms執行一次函數,防抖就是 最后一次觸發后ms后執行一次回調函數。
節流就是擰緊水龍頭,讓水滴一滴一滴流,而去抖則是按壓一個彈簧,不松手則彈簧不會觸發函數節流和去抖都是限制基于DOM事件執行的javascript數量的方法,都是為了提高JS性能,但是兩者是有區別的。
推薦閱讀
函數節流和去抖之間的區別
本小節引用
avaScript 函數節流...
JavaScript 高級系列...
這個是網上一個網友提的問題,自己未曾遇到也為實驗,先保存在這
源代碼:
原因:
圖片的比例不是1:1(圖片縱橫比不為1)
解決方法:(待驗證)
或
border-radius:100%4.如何優雅的實現金錢格式化:1234567890 --> 1,234,567,890
用正則魔法實現:
var test1 = "1234567890" var format = test1.replace(/B(?=(d{3})+(?!d))/g, ",") console.log(format) // 1,234,567,890
非正則的優雅實現:
function formatCash(str) { return str.split("").reverse().reduce((prev, next, index) => { return ((index % 3) ? next : (next + ",")) + prev }) } console.log(formatCash("1234567890")) // 1,234,567,8905.如何最佳的讓兩個整數交換數值
常規辦法:
var a=1,b=2; a += b; b = a - b; a -= b;
缺點也很明顯,整型數據溢出,對于32位字符最大表示數字是2147483647,如果是2147483645和2147483646交換就失敗了。
黑科技辦法:
a ^= b; b ^= a; a ^= b;
es6:
[b,a] = [a,b]6.實現標準JSON的深拷貝
var a = { a: 1, b: { c: 1, d: 2 } } var b=JSON.parse(JSON.stringify(a))
不考慮IE的情況下,標準JSON格式的對象蠻實用,不過對于undefined和function的會忽略掉。
7.在str前添加一個?號,+str會強制轉Number不用Number、parseInt和parseFloat和方法把"88"字符串轉換成數字
var str="88"; console.log(+str) // 88 //或者 console.log(str - 0) // 88 //但是如果是混合類型的字符串,則會轉為NaN var b="1606e"; console.log(+b) // NaN8.數組去重
方法1:最短的代碼實現es6
[...new Set([1, "1", 2, 1, 1, 3])]
function uniqueArray(arr){ return Array.from(new Set(arr)); }
方法2:使用filter + indexOf
如下代碼所示:
removeRepeatArray(arr) { return arr.filter(function (item, index, self) { return self.indexOf(item) === index; }); }
方法3:使用splice
如下代碼所示:
function uniqueArray(arr){ for(var i = 0; i < arr.length - 1; i++){ for(var j = i + 1; j < arr.length; j++){ if(arr[j] === arr[i]){ arr.splice(j--, 1); } } } return arr; }
方法4:只用Array
如下代碼所示:
function uniqueArray(arr){ var retArray = []; for(var i = 0; i < arr.length; i++){ if(retArray.indexOf(arr[i]) < 0){ retArray.push(arr[i]); } } return retArray; }
方法5:Object.keys(對象)
let a = ["1", "2", "3", 1,NaN,NaN,undefined,undefined,null,null, "a", "b", "b"]; const unique = arr => { var obj = {} arr.forEach(value => { obj[value] = 0;//這步新添加一個屬性,并賦值,如果不賦值的話,屬性會添加不上去 }) return Object.keys(obj);//`Object.keys(對象)`返回這個對象可枚舉屬性組成的數組,這個數組就是去重后的數組 } console.log(unique(a));//["1", "2", "3", "NaN", "undefined", "null", "a", "b"]
注意:
這個方法會將 number,NaN,undefined,null,變為字符串形式,因為對象的屬性名就是一個字符串
Array(6).fill(8)10.取出一個數組中的最大值和最小值
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411]; var maxInNumbers = Math.max.apply(Math, numbers); // 或 Math.max(...arr) var minInNumbers = Math.min.apply(Math, numbers); // 或 Math.min(...arr)11.將argruments對象轉換成數組
var argArray = Array.prototype.slice.call(arguments);
或者ES6:
var argArray = Array.from(arguments)12.短路表達式
條件判斷
var a = b && 1 // 相當于 if (b) { a = 1 } else { a = b }
var a = b || 1 // 相當于 if (b) { a = b } else { a = 1 }13.RGB to Hex
function toHEX(rgb){ return ((1<<24) + (rgb.r<<16) + (rgb.g<<8) + rgb.b).toString(16).substr(1); }14.JSON.stringify()妙用
1 語法
JSON.stringify(value[, replacer[, space]])
一般用法:
var user = {name: "andy", isDead: false, age: 11, addr: "shanghai"}; JSON.stringify(user); "{"name":"andy","isDead":false,"age":11,"addr":"shanghai"}"
2 擴展用法
2.1 replacer
replacer可以是函數或者是數組。
功能1: 改變屬性值
將isDead屬性的值翻譯成0或1,0對應false,1對應true
var user = {name: "andy", isDead: false, age: 11, addr: "shanghai"}; JSON.stringify(user, function(key, value){ if(key === "isDead"){ return value === true ? 1 : 0; } return value; }); //"{"name":"andy","isDead":0,"age":11,"addr":"shanghai"}"
功能2:刪除某個屬性
將isDead屬性刪除,如果replacer的返回值是undefined,那么該屬性會被刪除。
var user = {name: "andy", isDead: false, age: 11, addr: "shanghai"}; JSON.stringify(user, function(key, value){ if(key === "isDead"){ return undefined; } return value; }); //"{"name":"andy","age":11,"addr":"shanghai"}"
功能3: 通過數組過濾某些屬性
只需要name屬性和addr屬性,其他不要。
var user = {name: "andy", isDead: false, age: 11, addr: "shanghai"}; JSON.stringify(user, ["name", "addr"]); //"{"name":"andy","addr":"shanghai"}"
2.2 space
space可以是數字或者是字符串, 如果是數字則表示屬性名前加上空格符號的數量,如果是字符串,則直接在屬性名前加上該字符串。
功能1: 給輸出屬性前加上n個空格
var user = {name: "andy", isDead: false, age: 11, addr: "shanghai"}; JSON.stringify(user, null, 4);
"{ "name": "andy", "isDead": false, "age": 11, "addr": "shanghai" }"
功能2: tab格式化輸出
var user = {name: "andy", isDead: false, age: 11, addr: "shanghai"}; JSON.stringify(user, null, " ");
"{ "name": "andy", "isDead": false, "age": 11, "addr": "shanghai" }"
功能3: 搞笑
JSON.stringify(user, null, "good");
"{ good"name": "andy", good"isDead": false, good"age": 11, good"addr": "shanghai" }"
2.3 深拷貝
var user = {name: "andy", isDead: false, age: 11, addr: "shanghai"}; var temp = JSON.stringify(user); var user2 = JSON.parse(temp);
3 其他
JSON.parse() 其實也是支持第二個參數的。功能類似于JSON.stringify的第二個參數的功能。
console.log("$",$.fn.jquery) //$ 3.2.116.img異步加載圖片
在開發中,我們經常有異步加載圖片的請求,然后在圖片加載成功后做一些操作,一般我們通過onload方法來實現.網上有兩種寫法,大家可以先看一下(注:logo.jpg是張本地圖片):
例子1:
var img = new Image(); img.src = "logo.jpg"; img.onload = function () { alert("image is loaded"); }; document.body.appendChild(img);
例子2:
var img = new Image(); img.onload = function () { alert("image is loaded"); }; img.src = "logo.jpg"; document.body.appendChild(img);
發現什么了沒有?上面兩個例子最大的差別就在于onload和src賦值的先后順序.那么onload和src賦值的先后順序會在實際中產生什么差別呢?
產生這個問題的原因很簡單,就是因為logo.jpg是本地圖片,導致瀏覽器加載起來非常快,幾乎在給img賦值src的時候,圖片就已經加載完成,同時觸發了onload事件,代碼中為onload賦值的語句就相當于在onload事件發生后,這時候已經晚了.
將src寫到了onload的前面,會導致onload來不及賦值就被執行了,所以正確的寫法應該是第2個例子.既在給圖片分配地址前,先綁定好它的onload事件,這樣就不用擔心錯過時機的問題了.
正確的例子:
var img = new Image(); // 如果文檔裝入完成后加載用window load //window.addEventListener("load" , function(){ // document.body.appendChild(img); //} , false); // 如果圖片加載完畢用 img load img.addEventListener("load", function(){ document.body.appendChild(img); } , false); img.src = "test.png";17.幾個常用的console用法
1.console.log(): 進行標準輸出流的輸出(stdout)
console.group("mounted 掛載結束狀態===============》"); console.log("%c%s", "color:green","data : " + this.$data)
2.console.error(): 進行標準錯誤流的輸出用法與console.log()一樣.
3.console.dir(): 查看一個對象的內容,并把對象信息輸出到控制臺.
// a.js var person = { age: 38, name: "kobe", job: function(){ return "player" } }; console.log(person); // node a.js { age: 38, name: "kobe", job: [Function: job] }
4.console.time()與console.timeEnd() : 可以用來統計一段代碼的執行時間
// a.js console.time("loop"); for(var i =0;i < 10000;i++){ ; } console.timeEnd("loop"); // node a.js loop: 0.283ms
好玩的console.log()
console.log("%c3"," text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:6em;line-height:60px;") console.log("%c2"," text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:4em;line-height:60px;") console.log("%c1"," text-shadow: 0 1px 0 #ccc,0 2px 0 #c9c9c9,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15);font-size:2em;line-height:60px;") console.log("%c南京熱還是東京熱.", "color: #fff; background: #f40; font-size: 24px;border-radius:0 15px 15px 0;padding:10px;"); console.log("%c ","background-image:-webkit-gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );color:transparent;-webkit-background-clip: text;font-size:5em;width:1px;height:40px;padding:2px;") console.log("%c 熱 熱 熱", "color:red;font-size:30px;font-weight:bolder;padding:50px 420px;line-height:10px;background:url("http://img.zcool.cn/community/0127c0577e00620000012e7e12da0e.gif") repeat-x;background-size:contain;");18. !!強制轉布爾值boolean
根據當前需要判斷的值是真值還是假值來判斷,真值返回true,假肢返回false,那么這樣的話,除了假值,剩下的也都是真值了。
假值有:0 、 “” 、 null 、 undefined 、 false 、NaN
除了這 6 個外,其它均為“真” ,包括對象、數組、正則、函數等。
注意: "0"、"null"、"false"、{}、[]也都是真值 。
那么下面我們來看看!!是如何轉布爾值的。
例如:
首先我們聲明3個變量,x為null,y為空字符串,str為字符串,下面看看他們添加了"!!"后會有什么結果。
var x=null; var y=""; var str="abcd"; console.log(!!x) // false; console.log(!!y) // false; console.log(!!str) // true; 如上所說,假值返回false,真值返回true。19. 不可靠的undefined 可靠的void 0
在JavaScript中,假設我們想判斷一個是否是 undefined,那么我們通常會這樣寫:
if(a === undefined){ dosomething..... }
因為在javascript中,undefined是不可靠的
例如:
當undefined被放在在function函數內,我們把它當成一個局部變量,它是可以賦上值的,下面我們來試試。
function foo2(){ var undefined=1; console.log(undefined) } foo2(); // 1;
但是當在函數內定義一個全局變量,并不能給賦上值
var undefined; function foo2(){ undefined=1; console.log(undefined) } foo2() // undefined
那么我們試試用void 0或者 void (0)來代替:
先聲明一個變量a,賦值為undefined,接下來我們用void 0來判斷一下。
var a=undefined; //用void 0來判斷一下 if(a===void 0){ console.log("true") } // true //再用void (0)來判斷一下 if(a===void (0)){ console.log("true") } // true //最后我們打印一下這兩個的返回值 console.log(void 0,void (0)) // undefined undefined
我們現在可以通過void 0 運算來獲得 undefined;那在以后需要判斷值為undefined的時候,可以直接用void 0或者void (0),而且這兩個值的直接返回值就是undefined,所以說非常可靠哦!
20.用typeof來判斷對象的潛在陷阱問:使用 typeof bar === "object" 來確定 bar 是否是對象的潛在陷阱是什么?如何避免這個陷阱?
盡管 typeof bar === "object" 是檢查 bar 是否對象的可靠方法,令人驚訝的是在JavaScript中 null 也被認為是對象!
因此,令大多數開發人員驚訝的是,下面的代碼將輸出 true 控制臺:
var bar = null; console.log(typeof bar === "object"); // logs true!
只要清楚這一點,同時檢查 bar 是否為 null,就可以很容易地避免問題:
console.log( (bar !== null) && (typeof bar === "object") ); // logs false
要答全問題,還有其他兩件事情值得注意:
首先,上述解決方案將返回 false,當 bar 是一個函數的時候。在大多數情況下,這是期望行為,但當你也想對函數返回 true 的話,你可以修改上面的解決方案為:
console.log( (bar !== null) && ((typeof bar === "object") || (typeof bar === "function")) );
第二,上述解決方案將返回 true,當 bar 是一個數組(例如,當 var bar = [];)的時候。
在大多數情況下,這是期望行為,因為數組是真正的對象,但當你也想對數組返回 false 時,你可以修改上面的解決方案為:
console.log( (bar !== null)&& (typeof bar === "object") && (toString.call(bar) !== "[object Array]") );
或者,如果你使用jQuery的話:
console.log( (bar !== null)&& (typeof bar === "object") && (! $.isArray(bar)) );
或者 數組和函數返回false,但對于對象則為true:
console.log((bar !== null) && (bar.constructor === Object));
參考:
1.這些JavaScript編程黑科技...
2.圖片的異步加載與onload函數
3.原生js的常用方法整理
4.ec-do-2.0.0.js
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88518.html
摘要:本文總結的代碼片段六持續更新前端常用代碼片段一點這里前端常用代碼片段二點這里前端常用代碼片段三點這里前端常用代碼片段四點這里前端常用代碼片段五點這里前端常用代碼片段六點這里多彩的傳入和變量本節參考文章多彩的版本號比較和和本節參考文章 本文總結的代碼片段(六)--持續更新 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點...
摘要:兩個數組內的元素相加第二種考慮兼容一個數組插入到另一個數組通過方法將一個數組插入到另外一個數組數字排序的函數在默認情況下使用字母數字字符串碼點排序。它們具有不同的引用,無法用相比較。 最后更新于2019年1月13日 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六)...
摘要:盡量避免使用表達式又稱動態屬性。使用計算數組中的重復項如果你想計算數組中的每個值有多少重復值,也可以快速幫到你。 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六) 點這里 1.簡述一下你對HTML語義化的理解?并寫出一段語義化的HTML? 語義化是指根據內容的結...
最后更新于2019年1月13日 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里前端常用代碼片段(五) 點這里前端常用代碼片段(六) 點這里 大部分需要引入 jquery-1.9.1.min.js(兼容ie8) 1.回車觸發事件的代碼 $(function(){ $(#username).focus(...
摘要:當運行時,如果不為,則將超時函數推送到事件隊列,并且函數退出,從而使調用堆棧清零。因此,該方法從頭到尾不經過直接遞歸調用即可處理,因此調用堆棧保持清晰,無論迭代次數如何。 前端常用代碼片段(一) 點這里前端常用代碼片段(二) 點這里前端常用代碼片段(三) 點這里前端常用代碼片段(四) 點這里 1.tap事件點透問題? 問題點擊穿透問題:點擊蒙層(mask)上的關閉按鈕,蒙層消失后發現觸...
閱讀 3315·2021-11-12 10:36
閱讀 2467·2021-11-02 14:43
閱讀 2146·2019-08-30 14:23
閱讀 3463·2019-08-30 13:08
閱讀 919·2019-08-28 18:09
閱讀 3129·2019-08-26 12:22
閱讀 3141·2019-08-23 18:24
閱讀 2017·2019-08-23 18:17