二十二、jquery之——滾輪事件、正則

滾輪事件與函數(shù)節(jié)流

jquery.mousewheel插件使用
jquery中沒有鼠標(biāo)滾輪事件,原生js中的鼠標(biāo)滾輪事件不兼容,可以使用jquery的滾輪事件插件jquery.mousewheel.js。

函數(shù)節(jié)流
javascript中有些事件的觸發(fā)頻率非常高,比如onresize事件(jq中是resize),onmousemove事件(jq中是mousemove)以及上面說的鼠標(biāo)滾輪事件,在短事件內(nèi)多處觸發(fā)執(zhí)行綁定的函數(shù),可以巧妙地使用定時(shí)器來減少觸發(fā)的次數(shù),實(shí)現(xiàn)函數(shù)節(jié)流。

整屏滾動(dòng)實(shí)例

json

json是 JavaScript Object Notation 的首字母縮寫,單詞的意思是javascript對(duì)象表示法,這里說的json指的是類似于javascript對(duì)象的一種數(shù)據(jù)格式,目前這種數(shù)據(jù)格式比較流行,逐漸替換掉了傳統(tǒng)的xml數(shù)據(jù)格式。

javascript對(duì)象字面量:

var tom = {
    name:'tom',
   age:18
}

json格式的數(shù)據(jù):

{
"name":'tom',
"age":18
}

與json對(duì)象不同的是,json數(shù)據(jù)格式的屬性名稱需要用雙引號(hào)引起來,用單引號(hào)或者不用引號(hào)會(huì)導(dǎo)致讀取數(shù)據(jù)錯(cuò)誤。

json的另外一個(gè)數(shù)據(jù)格式是數(shù)組,和javascript中的數(shù)組字面量相同。

['tom',18,'programmer']

ajax與jsonp

ajax技術(shù)的目的是讓javascript發(fā)送http請(qǐng)求,與后臺(tái)通信,獲取數(shù)據(jù)和信息。ajax技術(shù)的原理是實(shí)例化xmlhttp對(duì)象,使用此對(duì)象與后臺(tái)通信。ajax通信的過程不會(huì)影響后續(xù)javascript的執(zhí)行,從而實(shí)現(xiàn)異步。

同步和異步
現(xiàn)實(shí)生活中,同步指的是同時(shí)做幾件事情,異步指的是做完一件事后再做另外一件事,程序中的同步和異步是把現(xiàn)實(shí)生活中的概念對(duì)調(diào),也就是程序中的異步指的是現(xiàn)實(shí)生活中的同步,程序中的同步指的是現(xiàn)實(shí)生活中的異步。

局部刷新和無刷新
ajax可以實(shí)現(xiàn)局部刷新,也叫做無刷新,無刷新指的是整個(gè)頁面不刷新,只是局部刷新,ajax可以自己發(fā)送http請(qǐng)求,不用通過瀏覽器的地址欄,所以頁面整體不會(huì)刷新,ajax獲取到后臺(tái)數(shù)據(jù),更新頁面顯示數(shù)據(jù)的部分,就做到了頁面局部刷新。

$.ajax({
        url: 'data.json',//請(qǐng)求的服務(wù)器路徑,實(shí)際開發(fā)中寫文檔接口的路徑
        type: 'get',//分get/post請(qǐng)求,涉及隱私或安全性要求較高的用post、安全要求不高及數(shù)據(jù)量較小的用get
        dataType: 'json',//要讀取什么格式的數(shù)據(jù),還可以是xml script html upload等
        // data:{page:1}//請(qǐng)求時(shí)要攜帶的參數(shù)
    })
    .done(function(data){//成功的時(shí)候會(huì)執(zhí)行的函數(shù),參數(shù)data是從后臺(tái)接收到的數(shù)據(jù),這里是json格式的字符串
        alert(data.name);
        console.log(data);
    })
    .fail(function(){//失敗的時(shí)候會(huì)執(zhí)行的函數(shù)
        console.log("error");
    })

    .fail(function(XMLHttpRequest, textStatus, errorThrown) {//失?。◣?shù))
        console.log("error");
        // 狀態(tài)碼
        console.log(XMLHttpRequest.status);
        // 狀態(tài)
        console.log(XMLHttpRequest.readyState);
        // 錯(cuò)誤信息   
        console.log(textStatus);
    })
    .always(function(){//不論成功與否都會(huì)執(zhí)行
        console.log("always");
    })

同源策略
ajax請(qǐng)求的頁面或資源只能是同一個(gè)域下面的資源,不能是其他域的資源,這是在設(shè)計(jì)ajax時(shí)基于安全的考慮。特征報(bào)錯(cuò)提示:

XMLHttpRequest cannot load https://www.baidu.com/. No
'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'null' is therefore not allowed access.

$.ajax使用方法
常用參數(shù):
1、url 請(qǐng)求地址
2、type 請(qǐng)求方式,默認(rèn)是'GET',常用的還有'POST'
3、dataType 設(shè)置返回的數(shù)據(jù)格式,常用的是'json'格式,也可以設(shè)置為'html'
4、data 設(shè)置發(fā)送給服務(wù)器的數(shù)據(jù)
5、success 設(shè)置請(qǐng)求成功后的回調(diào)函數(shù)
6、error 設(shè)置請(qǐng)求失敗后的回調(diào)函數(shù)
7、async 設(shè)置是否異步,默認(rèn)值是'true',表示異步

以前的寫法:

$.ajax({
   url: 'js/user.json',
   type: 'GET',
   dataType: 'json',
   data:{'aa':1}
   success:function(data){
       ......
   },
error:function(){
    alert('服務(wù)器超時(shí),請(qǐng)重試!');
   }
});

新的寫法(推薦):

$.ajax({
    url: 'js/user.json',
    type: 'GET',
    dataType: 'json',
    data:{'aa':1}
})
.done(function(data) {
    ......
})
.fail(function() {
    alert('服務(wù)器超時(shí),請(qǐng)重試!');
});
jsonp 

ajax只能請(qǐng)求同一個(gè)域下的數(shù)據(jù)或資源,有時(shí)候需要跨域請(qǐng)求數(shù)據(jù),就需要用到j(luò)sonp技術(shù),jsonp可以跨域請(qǐng)求數(shù)據(jù),它的原理主要是利用了script標(biāo)簽可以跨域鏈接資源的特性。

jsonp的原理如下:

<script type="text/javascript">
    function aa(dat){
        alert(dat.name);
    }
</script>
<script type="text/javascript" src="....../js/data.js"></script>

頁面上定義一個(gè)函數(shù),引用一個(gè)外部js文件,外部js文件的地址可以是不同域的地址,外部js文件的內(nèi)容如下:

aa({"name":"tom","age":18});

外部js文件調(diào)用頁面上定義的函數(shù),通過參數(shù)把數(shù)據(jù)傳進(jìn)去。

正則表達(dá)式

1、什么是正則表達(dá)式:
能讓計(jì)算機(jī)讀懂的字符串匹配規(guī)則。

2、正則表達(dá)式的寫法:

var re=new RegExp('規(guī)則', '可選參數(shù)');
var re=/規(guī)則/參數(shù);

3、規(guī)則中的字符
1)普通字符匹配:
如:/a/ 匹配字符 ‘a(chǎn)’,/a,b/ 匹配字符 ‘a(chǎn),b’

2)轉(zhuǎn)義字符匹配:
\d 匹配一個(gè)數(shù)字,即0-9
\D 匹配一個(gè)非數(shù)字,即除了0-9
\w 匹配一個(gè)單詞字符(字母、數(shù)字、下劃線)
\W 匹配任何非單詞字符。等價(jià)于[^A-Za-z0-9_]
\s 匹配一個(gè)空白符
\S 匹配一個(gè)非空白符
\b 匹配單詞邊界
\B 匹配非單詞邊界
. 匹配一個(gè)任意字符,除了換行符‘\n’和回車符‘\r’
\1 重復(fù)子項(xiàng)

4、量詞:對(duì)左邊的匹配字符定義個(gè)數(shù)
? 出現(xiàn)零次或一次(最多出現(xiàn)一次)

  • 出現(xiàn)一次或多次(至少出現(xiàn)一次)

  • 出現(xiàn)零次或多次(任意次)
    {n} 出現(xiàn)n次
    {n,m} 出現(xiàn)n到m次
    {n,} 至少出現(xiàn)n次

5、任意一個(gè)或者范圍
[abc123] : 匹配‘a(chǎn)bc123’中的任意一個(gè)字符
[a-z0-9] : 匹配a到z或者0到9中的任意一個(gè)字符

6、限制開頭結(jié)尾
^ 以緊挨的元素開頭
$ 以緊挨的元素結(jié)尾

7、修飾參數(shù):
g: global,全文搜索,默認(rèn)搜索到第一個(gè)結(jié)果接停止
i: ingore case,忽略大小寫,默認(rèn)大小寫敏感
m: multiple lines,多行搜索(更改^ 和$的含義,使它們分別在任意一行對(duì)待行首和行尾匹配,而不僅僅在整個(gè)字符串的開頭和結(jié)尾匹配)

8、常用函數(shù)
1、test
用法:正則.test(字符串) 匹配成功,就返回真,否則就返回假

2、search
用法:字符串.search(正則) 匹配成功,返回位置,否則返回-1

3、match
用法: 字符串.match(正則);匹配成功,就返回匹配成功的數(shù)組,否則就返回null

4、replace
用法:字符串.replace(正則,新的字符串) 匹配成功的字符去替換新的字符

正則默認(rèn)規(guī)則
匹配成功就結(jié)束,不會(huì)繼續(xù)匹配,區(qū)分大小寫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,819評(píng)論 1 45
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,851評(píng)論 0 3
  • JavaScript,通??s寫為 JS,是一種解釋執(zhí)行的編程語言。它是現(xiàn)在最流行的腳本語言之一。 JavaScri...
    神齊閱讀 5,477評(píng)論 1 32
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,206評(píng)論 3 119
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評(píng)論 19 139

友情鏈接更多精彩內(nèi)容