最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實現(xiàn)跑馬燈抽獎活動實例代碼解析與優(yōu)化(一)

 更新時間:2016年02月16日 13:47:05   作者:zhiqiang21  
這篇文章主要介紹了JavaScript實現(xiàn)跑馬燈抽獎活動實例代碼解析與優(yōu)化(一)的相關資料,需要的朋友可以參考下

 最近做了個項目,其中有項目需求是要實現(xiàn)跑馬燈抽獎效果,實現(xiàn)此功能主要用到js相關知識,廢話不多說,感興趣的朋友可以閱讀下全文。

開始之前先來看上篇文章遺漏的兩個問題和幾個知識點,是自己重構的過程中需要用到的:

1.移動端1px像素線的問題

對于設計師給我的手機端網(wǎng)頁的設計稿都是2倍圖。按照道理來說,在寫網(wǎng)頁的時候,所有對象的實際尺寸都是會除2。但是對于1像素的線呢?

先來看兩張圖,設計稿的效果:

這里寫圖片描述 

在三星 S4下的實際顯示效果:

這里寫圖片描述 

可以看到這個時候1px的線竟然顯示不出來了。這個問題是跟 S4手機的屏幕像素密度有關。關于屏幕像素密度和1px 線的關系有很多文章介紹,可以自行搜索了解。我這里的解決方案是,對1px 的線不做處理。是多少就寫多少。就算我的基礎單位是rem,也不是其它單位。

{
position: absolute;
width: 13rem;
height: 9.2rem;
border:1px solid #000;
}

2.pc 端瀏覽器和移動端瀏覽器容錯率的差異

先來看一段代碼:

$('[node-type=row-a').find('div');

很明顯可以發(fā)現(xiàn),我使用的選擇器是有語法錯誤的。但是在瀏覽器中運行會有什么結果呢?看下圖:

這里寫圖片描述

很明顯可以看出對于屬性選擇器,就算我有語法錯誤,PC 端瀏覽器也是可以正確解析的。但是在手機端,這種寫法是不能夠正確解析,代碼不能夠運行。

所以寫代碼的時候一定要注意一些小細節(jié)哈。。。

3.jQuery中選擇器的使用

在使用 jQuery 或者是 Zepto 的過程中最經(jīng)常使用的選擇器的寫法就是下面這樣吧,

$('div.testClass')

只是在$() 中寫上自己需要的 Dom 節(jié)點的 class或者 ID 或 者使用屬性選擇器。
在查看 jQuery的文檔,對于$()會有這樣的描述:

jQuery([selector,[context]])

最重要的是看看對 context (它也是我們平時使用中最容易忽略,但是卻非常有用的一個參數(shù))的描述:

默認情況下, 如果沒有指定context參數(shù),$()將在當前的 HTML document中查找 DOM 元素;如果指定了 context 參數(shù),如一個 DOM 元素集或 jQuery 對象,那就會在這個 context 中查找。在jQuery 1.3.2以后,其返回的元素順序等同于在context中出現(xiàn)的先后順序。

剛開始學習 JavaScript 那會兒,就聽說了操作 DOM 是很損耗瀏覽器性能,遍歷 DOM 也是很影響程序性能的。
如果我們在指定的范圍內(nèi)查找需要的 Dom 會不會比從整個document 中查找快很多。而且在我們寫 web 組件的過程中,一個頁面上組件可能出現(xiàn)很多次,那我們怎么判斷我們要操作哪個組件呢?這個context參數(shù)就會起到?jīng)Q定行的作用。具體請繼續(xù)看哇。。。

4.jQuery對象到數(shù)組的轉(zhuǎn)換

剛開始學習 jQuery的時候在一本書上看到一句話:

jQuery對象就是一個 JavaScript 數(shù)組。

而且在使用 jQuery的過程中,都會遇到,js對象轉(zhuǎn) jQuery對象,jQuery對象轉(zhuǎn) js對象。關于這些基礎不做過多介紹。
但是有時候我們會想在 jQuery對象上運用一些原生Array對象的方法或者屬性。來看一個簡單的例子:

這里寫圖片描述

由圖中的代碼運行結果,可以知道在 jQuery對象上是沒有我們要使用reverse方法的。盡管test是一個數(shù)組。
那么我們怎么辦才可以讓 jQuery對象使用原生的 Array對象的方法呢?

4.1使用原型鏈擴展

比如下面的代碼:

jQuery.prototype.reverse=function(){
//一些操作
}

使用prototype來擴展方法的時候,大家一直比較認為是缺點的就是可能會污染已經(jīng)存在的原型鏈上的方法。還有就是訪問方法的時候需要查找原型鏈。

4.2將 jQuery對象中的對象添加到數(shù)組中

看下面的代碼

var test = $('div.test');
var a=[];
$(test).each(function(){
a.push($(this));
});
a.reverse();

這樣就可以將 jQuery對象翻轉(zhuǎn)。

4.3使用 Array對象的 from()方法

這種方法也是自己在編寫插件過程中使用的方法??匆幌挛臋n描述:

Array.from() 方法可以將一個類數(shù)組對象或可迭代對象轉(zhuǎn)換成真實的數(shù)組。
個人感覺使用這個代碼比較簡潔。暫時還不知道有沒有性能的影響。繼續(xù)看下面的代碼:

var test = $('div.test');
var a= Array.from(test);
a.reverse();

5.setInterval()和setTimeout()對程序性能的影響

因為setTimeout()和setInterval()這兩個函數(shù)在 JavaScript 中的實現(xiàn)機制完全一樣,這里只拿 setTimeout()驗證

那么來看兩段代碼

var a ={
test:function(){
setTimeout(this.bbb,1000);
},
bbb:function(){
console.log('----');
}
};
a.test()

輸出結果如下:

這里寫圖片描述

看下面的代碼輸出是什么

var a ={
test:function(){
setTimeout(function(){
console.log(this);
this.bbb();
},1000);
},
bbb:function(){
console.log('----');
}
};
a.test();

運行這段代碼的時候,代碼報錯

這里寫圖片描述

由以上的結果可以知道,當我們在使用setInterval()和setTimeout()的時候,在回掉中使用this的時候,this的作用域已經(jīng)發(fā)生了改變,并且指向了 window。

setTimeout(fn,0)的含義是,指定某個任務在主線程最早可得的空閑時間執(zhí)行,也就是說,盡可能早得執(zhí)行。它在”任務隊列”的尾部添加一個事件,因此要等到同步任務和”任務隊列”現(xiàn)有的事件都處理完,才會得到執(zhí)行。
意思就是說在我們設置 setTimeout()之后,也可能不是立即等待多少秒之后就立即執(zhí)行回掉,而是會等待主線程的任務都處理完后再執(zhí)行,所以存在 “等待”超過自己設置時間的現(xiàn)象。同時也會存在異步隊列中已經(jīng)存在了其它的 setTimeout() 也是會等待之前的都執(zhí)行完再執(zhí)行當前的。

看一個 Demo:

setTimeout(function bbb(){},4000);
function aaa(){
setTimeout(function ccc(){},1000);
}
aaa();

如果運行上面的代碼,當執(zhí)行完 aaa() 等待一秒后并不會立即執(zhí)行 ccc(),而是會等待 bbb() 執(zhí)行完再執(zhí)行 ccc() 這個時候離主線程運行結束已經(jīng)4s 過去了。

以上內(nèi)容是針對JavaScript實現(xiàn)跑馬燈抽獎活動實例代碼解析與優(yōu)化(一),下篇繼續(xù)給大家分享JavaScript實現(xiàn)跑馬燈抽獎活動實例代碼解析與優(yōu)化(二),感興趣的朋友敬請關注。

相關文章

  • js實現(xiàn)簡易垂直滾動條

    js實現(xiàn)簡易垂直滾動條

    本文主要介紹了js實現(xiàn)簡易垂直滾動條的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • ES6的一些實用高級技巧總結

    ES6的一些實用高級技巧總結

    ES6不僅在語法上有很大的改進,在代碼的組織結構上也有重大升級,下面這篇文章主要給大家介紹了關于ES6的一些實用高級技巧的相關資料,需要的朋友可以參考下
    2023-12-12
  • js跨瀏覽器實現(xiàn)將字符串轉(zhuǎn)化為xml對象的方法

    js跨瀏覽器實現(xiàn)將字符串轉(zhuǎn)化為xml對象的方法

    將字符串轉(zhuǎn)化為xml對象需要注意的是該死的ie多版本的問題,具體實現(xiàn)如下,感興趣的朋友不妨參考下本文,希望對大家有所幫助
    2013-09-09
  • JS jQuery使用正則表達式去空字符的簡單實現(xiàn)代碼

    JS jQuery使用正則表達式去空字符的簡單實現(xiàn)代碼

    本文給大家分享使用正則表達式去空字符的簡單實現(xiàn)方法,需要的朋友參考下
    2017-05-05
  • 微信小程序的線程架構【推薦】

    微信小程序的線程架構【推薦】

    這篇文章主要介紹了微信小程序的線程架構,每個小程序包含一個描述整體程序的app實例和多個描述頁面的page,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • 微信小程序 自定義消息提示框

    微信小程序 自定義消息提示框

    這篇文章主要介紹了微信小程序 自定義消息提示框的相關資料,wx.showToast(OBJECT)接口調(diào)用,實現(xiàn)改功能,需要的朋友可以參考下
    2017-08-08
  • 淺談JS的基礎類型與引用類型

    淺談JS的基礎類型與引用類型

    下面小編就為大家?guī)硪黄獪\談JS的基礎類型與引用類型。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • IE與Firefox在JavaScript上的7個不同句法分享

    IE與Firefox在JavaScript上的7個不同句法分享

    盡管那需要用長串的、沉悶的不同分支代碼來應付不同瀏覽器的日子已經(jīng)過去,偶爾還是有必要做一些簡單的區(qū)分和目標檢測來確保某塊代碼能在用戶的機器上正常運行
    2011-10-10
  • 你不知道的高性能JAVASCRIPT

    你不知道的高性能JAVASCRIPT

    想必大家都知道,JavaScrip是全棧開發(fā)語言,瀏覽器,手機,服務器端都可以看到JS的身影。 本文會分享一些高效的JavaScript的最佳實踐,提高大家對JS的底層和實現(xiàn)原理的理解,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JavaScript轉(zhuǎn)換與解析JSON方法實例詳解

    JavaScript轉(zhuǎn)換與解析JSON方法實例詳解

    這篇文章主要介紹了JavaScript轉(zhuǎn)換與解析JSON方法,實例分析了JavaScript解析json的技巧,并附帶分析了jQuery解析與轉(zhuǎn)換json的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11

最新評論

屏南县| 美姑县| 大竹县| 太仆寺旗| 安平县| 金沙县| 广宗县| 西宁市| 越西县| 台北县| 湄潭县| 浦江县| 镇巴县| 永安市| 凤冈县| 恭城| 渝中区| 禹城市| 元阳县| 阿城市| 迭部县| 辽阳县| 郸城县| 临漳县| 沁源县| 伊春市| 盖州市| 台中市| 阿城市| 于田县| 西盟| 白银市| 乐清市| 富锦市| 潜江市| 轮台县| 井研县| 广州市| 安陆市| 垦利县| 苗栗市|