整理一些js容易混淆遺忘的東西

程序猿.jpg

1. 事件冒泡

同種事件同時(shí)實(shí)現(xiàn)時(shí) 子元素優(yōu)先觸發(fā),如以下代碼:

...
<input type="button" name="" id="" value="" />
...
var btn = document.querySelector("input");
document.onclick = function () {
    console.log("doc點(diǎn)擊");
 }
btn.onclick = function () {
    console.log("btn點(diǎn)擊");   
}

點(diǎn)擊btn時(shí)相對(duì)于也點(diǎn)擊了整個(gè)文檔,這是會(huì)先打印btn點(diǎn)擊,再打印doc點(diǎn)擊,在console.log("btn點(diǎn)擊");下方添加window.event.cancelBubble = true;,這時(shí)只打印btn點(diǎn)擊,這就是如何取消事件冒泡.

2.阻止系統(tǒng)的默認(rèn)事件

鼠標(biāo)右鍵時(shí)會(huì)彈出系統(tǒng)默認(rèn)的菜單,如果想自己定義一個(gè)菜單就要消除系統(tǒng)默認(rèn)的菜單,在你的右鍵函數(shù)最后寫上return false;或者event.preventDefault()即可.但是此方法并不被ie支持,在ie下需要用window.event.returnValue = false;來實(shí)現(xiàn).(我是比較討厭ie的,大家都懂的...), 下面是我寫的右鍵菜單,比較簡單,代碼就不寫了哈.

鼠標(biāo)右鍵.png

3.幾個(gè)事件兼容

(1)firefox

firefox火狐瀏覽器中事件為觸發(fā)函數(shù)的第一個(gè)參數(shù)
其他瀏覽器為window.event

var evObj = ev || window.event;

(2)兼容ie的事件綁定函數(shù)

...
div{
    width: 100px;
    height: 100px;
    background-color: yellow;
}
...
<div></div>
...
var div = document.querySelector('div');
if(window.navigator.userAgent.indexOf() =='IE'){
    div.addEventListener('onclick' ,function(){
        alert(1)
    })
    }else{
        div.addEventListener('click',function(){
            alert(1)
        })
}

window.navigator.userAgent.indexOf() ==‘IE’也可以寫成window.navigator.userAgent.indexOf(‘IE’) == -1

(3)事件監(jiān)聽兼容

function fn() {
    alert(1);
}
if (document.addEventListener) {
    document.addEventListener("click", fn);
} else if (document.attachEvent) {
    // 兼容ie6-8
    // 事件名需要加on
    document.addEventListener("onclick", fn)
}

document.attachEvent就是為了兼容IE6-IE8,而且事件名要加on

3.各種寬度

clientWidth 包括widthpadding
offsetWidth 包括width,paddingborder

innerWidth 包括widthpadding
outerWidth 包括width,paddingborder

4.時(shí)間獲取

getDay() 返回表示星期的某一天的數(shù)字, 如果今天是周二就返回2
getDate() 返回月份的某一天, 如果今天是17號(hào)就返回17
getTime() 返回距 1970 年 1 月 1 日之間的毫秒數(shù)

5.cookie

cookie: 保存在瀏覽器上的數(shù)據(jù)
大小: 5kb
數(shù)據(jù)類型: 數(shù)字/字符串
數(shù)據(jù)格式: 鍵值對(duì)(key-value)
用處: 登錄界面,保存用戶名和密碼

document.cookie = "user1=marry;";
document.cookie = "pwd=123456;";
document.cookie = "user=bibhi;";
// 保存到cookie的數(shù)據(jù)是一整個(gè)字符串 
// string.split(分割符) 字符串切割
var cookies = document.cookie.split("; ");
for (var i = 0; i < cookies.length; i++) {
        // 把每一個(gè)條目通過=切割
        // 0位 -> 條目的描述(key)
        // 1位 -> 具體的值(value)
        var t = cookies[i].split("=");
        console.log(t[0]);
        console.log(t[1]);
}
打印結(jié)果.png

保存用戶名和密碼這種東西可以寫一個(gè)框架,以后要的時(shí)候調(diào)用就可以了,框架如下:

function setCookie(name, www) {
    document.cookie = name + "=" + www + ";";
}
// 獲取
function getCookie(name) {
    // 條目數(shù)組
    var cookies = document.cookie.split("; ")
    for (var i = 0; i < cookies.length; i++) {
        var a = cookies[i].split("=")
            // a中包含兩個(gè)數(shù)據(jù)
            // 0->name
            // 1->www
        if (a[0] == name) {
            return a[1];
        }
    }
    // 如果沒有找到對(duì)應(yīng)內(nèi)容返回false
    return false;
}
function removeCookie(name) {
    setCookie(name,"");
}

忘了寫cookie的一些注意事項(xiàng)了:
1.字符串切割時(shí) 使用"; "切割( 要有空格)
2.cookie中不要保存中文
3.當(dāng)添加的數(shù)據(jù)key值不存在時(shí) 新建條目 , 如果key值存在 覆蓋原數(shù)據(jù) 覆蓋后條目在cookie的末尾
4.一旦保存數(shù)據(jù)會(huì)一直存在

6.圖片懶加載

如果一個(gè)頁面很長,照片很多,當(dāng)用戶打開頁面時(shí)如果所有照片都加載了會(huì)很浪費(fèi)時(shí)間,用戶體驗(yàn)較差.所以可以設(shè)置當(dāng)用戶向下滑動(dòng)滾輪時(shí)再加載剩余的照片,這就是圖片懶加載.
整體思想: 當(dāng)頁面滾動(dòng)的距離大于圖片距頂端的距離窗口可視高度的差時(shí),圖片開始加載
具體寫法如下:

簡單的設(shè)置下圖片的樣式:
<style type="text/css">
    img{
        width: 600px;
        height: 400px;
        background-color: #CCCCCC;
        position: absolute;
        top: 1000px;
    }
</style>
注意圖片地址要寫在 data-src 里
<body>
        <img src="" data-src = "http://img2.zol.com.cn/product/98_940x705/577/ceDYOL5WHbbM.jpg"/>
</body>
js部分:
<script type="text/javascript">
        var img = document.querySelector("img");
        // 圖片距頂端距離
        var t = img.offsetTop;
        // 窗口可視高度
        var  h = document.documentElement.clientHeight;
        // 顯示圖片所需要的最小自動(dòng)距離
        var distance = t - h;
        // 滑動(dòng)觸發(fā)
        window.onscroll = function () {
            // 滑動(dòng)時(shí) 頂端距離
            var scrollTop = document.body.scrollTop || window.pageYOffset ||document.documentElement.scrollTop;
            // 懶加載
            if (scrollTop >= distance) {
                var imPath = img.getAttribute("data-src");
                img.setAttribute("src", imPath);
            }
        }
</script>

這里scrollTop是一個(gè)比較頭疼的問題,又涉及到兼容的問題
(1)IE6/IE7/IE8:
對(duì)于沒有doctype聲明的頁面里可以使用 document.body.scrollTop來獲取 scrollTop高度 ;
有聲明的可以直接使用document.documentElement.scrollTop终抽;
(2)Firefox:
直接用document.documentElement.scrollTop 易猫;
(3)chrome:
document.body.scrollTopdocument.documentElement.scrollTop ;可能都取不到值
(4)Safari:
有自己獲取scrollTop的函數(shù) : window.pageYOffset 晾匠;
所以保險(xiǎn)的寫法就是var scrollTop = document.body.scrollTop || window.pageYOffset ||document.documentElement.scrollTop;, 不管你是啥瀏覽器我都兼容.yi

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末茶袒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凉馆,更是在濱河造成了極大的恐慌薪寓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡隔躲,警方通過查閱死者的電腦和手機(jī)恕沫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埂蕊,“玉大人,你說我怎么就攤上這事∑婊剑” “怎么了供璧?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冻记。 經(jīng)常有香客問我睡毒,道長,這世上最難降的妖魔是什么冗栗? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任演顾,我火速辦了婚禮,結(jié)果婚禮上隅居,老公的妹妹穿的比我還像新娘钠至。我一直安慰自己,他們只是感情好胎源,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布棉钧。 她就那樣靜靜地躺著,像睡著了一般涕蚤。 火紅的嫁衣襯著肌膚如雪宪卿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天万栅,我揣著相機(jī)與錄音佑钾,去河邊找鬼。 笑死烦粒,一個(gè)胖子當(dāng)著我的面吹牛休溶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扰她,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼兽掰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了徒役?” 一聲冷哼從身側(cè)響起孽尽,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廉涕,沒想到半個(gè)月后泻云,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狐蜕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年宠纯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片层释。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婆瓜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情廉白,我是刑警寧澤个初,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站猴蹂,受9級(jí)特大地震影響院溺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜磅轻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一珍逸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧聋溜,春花似錦谆膳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至把曼,卻和暖如春杨帽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祝迂。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工睦尽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人型雳。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像山害,于是被迫代替她去往敵國和親纠俭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Window和document對(duì)象的區(qū)別 window對(duì)象window對(duì)象表示瀏覽器中打開的窗口window對(duì)象是...
    FConfidence閱讀 2,159評(píng)論 0 5
  • 以下是常用的代碼收集浪慌,學(xué)習(xí)用冤荆。轉(zhuǎn)自豪情博客園 1. PC - js 返回指定范圍的隨機(jī)數(shù)(m-n之間)的公式 re...
    自由加咖啡閱讀 992評(píng)論 0 1
  • 語法基礎(chǔ) 類型轉(zhuǎn)換 1,parseInt(),parseFloat(),Number()要傳參,toString(...
    ishgy閱讀 480評(píng)論 0 0
  • 兩行狂柳水畔权纤, 一挺青松山間钓简, 少不凌云蕩寰宇, 老來何以話當(dāng)年汹想, 回首一何慚外邓。 莫笑我等癡狂, 試問天道何方古掏? ...
    wolf野狼閱讀 300評(píng)論 0 0
  • 也許是對(duì)死亡损话,從小到大父母就沒有說太多,清明節(jié)給我的印象不深。 我記得最為印象深的丧枪,與死亡的兩次近距離接觸光涂,第一,...
    鳳凰涅槃再涅槃閱讀 280評(píng)論 0 0