2017-3-15 JS 學(xué)習(xí)筆記

滾動(dòng)事件的認(rèn)識(shí)

  • 實(shí)際開(kāi)發(fā)中抛虫,我們經(jīng)常需要監(jiān)聽(tīng)滾動(dòng)事件
  • 滾動(dòng)事件一般是由 window 來(lái)觸發(fā)
window.onscroll = function(){
        //獲取滾動(dòng)的距離
        var myScrolltop = document.documentElement.scrollTop || document.body.scrollTop;
        console.log(myScrollTop);
}        

不同瀏覽器中獲取滾動(dòng)距離的方式

  • 在 ie9 以及新的版本
var scrollT = window.pageYOffset;
  • 在火狐以及符合 w3c 標(biāo)準(zhǔn)的瀏覽器
var scrollT = document.documentElement.scrollTop;
  • 谷歌瀏覽器以及沒(méi)有定義 DTD
var scrollT = document.body.scrollTop;
var myScrollT = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
scroll().top;
scroll().left;
  • 抽取滾動(dòng)距離的方法
//抽取方法用來(lái)獲取滾動(dòng)的距離
function scroll(){
        //判斷不同瀏覽器
        if(windows.pageXOffset != null){
                  //ie9 以及新的版本
                 return {
                            top:window.pageYOffset,
                            left:window.pageXOffset
                 } 
        }else if(document.compatMode == 'CSS1Compat'){
                    //表示火狐以及符合 w3c
                    return{
                              top:document.documentElement.scrollTop,
                              left:document.documentElement.scrollLeft
                    }      
        }
        return {
                   top:document.body.scrollTop,
                   left:document.body.scrollLeft
        }
}

瀑布流的注意點(diǎn)

  • 獲取第一行的高度最短的盒子
  • 將后面的盒子放置到高度最短的盒子下方
  • 更新最短盒子的高度,再次尋找最短盒子脸哀,此處創(chuàng)建函數(shù)來(lái)執(zhí)行*
  • 當(dāng)滾動(dòng)的距離 + 屏幕的高度 >= 最后一個(gè)盒子的 offsetTop + 最后一個(gè)盒子高度的一半的時(shí)候蝌诡,開(kāi)始加載圖片(此處設(shè)定臨界值自由設(shè)置),此處創(chuàng)建函數(shù)來(lái)判斷
  • 加載圖片就是動(dòng)態(tài)創(chuàng)建添加盒子,數(shù)據(jù)是存放在字典中的
  • 加載之后再次調(diào)用 * 處的函數(shù)镰禾,讓圖片正確排版
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>瀑布流三練</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            border:none;
        }
        .box{
            padding:10px 0 0 10px;
            float: left;
        }
        .box .pic{
            padding: 10px;
            border: 1px solid #CCCCCC;
        }
        .box .pic img{
            width: 150px;
        }
    </style>
</head>
<body>
<div class="main" id="main">
    <div class="box"><div class="pic">![](images/0.jpg)</div></div>
    <div class="box"><div class="pic">![](images/1.jpg)</div></div>
    <div class="box"><div class="pic">![](images/2.jpg)</div></div>
    <div class="box"><div class="pic">![](images/3.jpg)</div></div>
    <div class="box"><div class="pic">![](images/4.jpg)</div></div>
    <div class="box"><div class="pic">![](images/5.jpg)</div></div>
    <div class="box"><div class="pic">![](images/6.jpg)</div></div>
    <div class="box"><div class="pic">![](images/7.jpg)</div></div>
    <div class="box"><div class="pic">![](images/8.jpg)</div></div>
    <div class="box"><div class="pic">![](images/9.jpg)</div></div>
    <div class="box"><div class="pic">![](images/10.jpg)</div></div>
    <div class="box"><div class="pic">![](images/11.jpg)</div></div>
    <div class="box"><div class="pic">![](images/12.jpg)</div></div>
    <div class="box"><div class="pic">![](images/13.jpg)</div></div>
    <div class="box"><div class="pic">![](images/14.jpg)</div></div>
    <div class="box"><div class="pic">![](images/15.jpg)</div></div>
    <div class="box"><div class="pic">![](images/16.jpg)</div></div>
    <div class="box"><div class="pic">![](images/17.jpg)</div></div>
    <div class="box"><div class="pic">![](images/18.jpg)</div></div>
    <div class="box"><div class="pic">![](images/19.jpg)</div></div>
    <div class="box"><div class="pic">![](images/20.jpg)</div></div>
    <div class="box"><div class="pic">![](images/21.jpg)</div></div>
    <div class="box"><div class="pic">![](images/22.jpg)</div></div>
    <div class="box"><div class="pic">![](images/23.jpg)</div></div>
    <div class="box"><div class="pic">![](images/24.jpg)</div></div>
    <div class="box"><div class="pic">![](images/25.jpg)</div></div>
    <div class="box"><div class="pic">![](images/26.jpg)</div></div>
    <div class="box"><div class="pic">![](images/27.jpg)</div></div>
    <div class="box"><div class="pic">![](images/28.jpg)</div></div>
    <div class="box"><div class="pic">![](images/29.jpg)</div></div>
    <div class="box"><div class="pic">![](images/30.jpg)</div></div>
</div>
<script src="js/Underscore-min.js"></script>
<script src="js/MyFn.js"></script>
<script>
    window.onload = function () {
        window.onscroll = function () {
            water();
            if(checkLoadDate()){
                var images =  [{src:'21.jpg'},{src:'11.jpg'},{src:'1.jpg'},{src:'12.jpg'},{src:'13.jpg'},{src:'14.jpg'},{src:'5.jpg'},{src:'21.jpg'},{src:'11.jpg'},{src:'1.jpg'},{src:'12.jpg'},{src:'13.jpg'},{src:'14.jpg'},{src:'5.jpg'}];

                for(var i = 0;i<images.length;++i){
                    var main = document.getElementById("main");
                    var box = document.createElement("box");
                    var pic = document.createElement("pic");
                    main.appendChild(box);
                    box.className = "box";
                    pic.className = "pic" ;
                    box.appendChild(pic);
                    var img = document.createElement("img");
                    img.src = "images/" + images[i].src;
                    pic.appendChild(img);
                }
            }
        };

        function getIndex(arr,value){
            for(var i = 0;i<arr.length;++i){
                if(arr[i] == value){
                    return i;
                }
            }
        }
        function water(){
            var main = document.getElementById("main");
            var box = main.children;
            var pic = box.children;
            var screenW = document.documentElement.clientWidth;
            var boxW = box[0].offsetWidth;
            var col = parseInt(screenW/boxW);
            var heightArr = []
            for(var i = 0 ; i <box.length;++i){
                var boxHeight = box[i].offsetHeight;
//            console.log(boxHeight);
                if(i < col){
                    heightArr.push(boxHeight)

                }else{
                    var minHeight = _.min(heightArr);
//                console.log(minHeight);
                    var minIndex = getIndex(heightArr,minHeight);
//                console.log(minIndex);
                    box[i].style.position = "absolute";
                    box[i].style.top = minHeight + 'px';
                    box[i].style.left = minIndex * box[0].offsetWidth + 'px';
                    heightArr[minIndex] += boxHeight;
                }
            }

        }
        function checkLoadDate(){
            var main = document.getElementById("main");
            var box = main.children;
            var pic = box.children;
            var scrollTop = scroll().top;
            var lastBox = box[box.length - 1];
            var screenH = document.documentElement.clientHeight;
            if(scrollTop + screenH > lastBox.offsetTop + lastBox.offsetWidth*0.5){
                return true;
            }else{
                return false;
            }


        }

    }
</script>
</body>
</html>
  • 滾動(dòng)到某個(gè)位置
window.scrollTo(0,800);
//第一個(gè)參數(shù)表示水平滾動(dòng)黑竞,第二個(gè)參數(shù)表示垂直滾動(dòng)

window 的內(nèi)置對(duì)象

  • 任何一個(gè)全局變量都是 window 的屬性
  • 任何一個(gè)全局函數(shù)都是 window 的方法
  • 注意不要在 window.onload 方法使用 window 獲取全局的屬性和方法
console.log(window.dog);
window.sum();

字符串的常見(jiàn)方法

  • 創(chuàng)建字符串
var myString = 'my敏感體質(zhì)';
  • 獲取某一個(gè)字符的位置
    如果獲取某個(gè)字符的位置,這個(gè)字符有多個(gè)疏旨,那么獲取是第一個(gè)的位置
//indexOf:從左到右獲取字符的位置很魂,順序是從左到右
var index = myString.indexOf('a');
//lastIndexOf: 從右到左獲取字符的位置,結(jié)果順序是從左到右
var lastI = myString.lastIndexOf('a');
  • 獲取某個(gè)位置的字符
//charAt:獲取某個(gè)位置的字符
var mySym = myString.charAt(1);
//myCodeSym:獲取某個(gè)字符的 Unicode 編碼
//但凡漢子轉(zhuǎn)化成 Unicode 編碼值是大于 127 的
var myCodeSym = myString.charCodeAt(1);
//獲取字符的長(zhǎng)度
console.log(myString.length);
  • 獲取字符的實(shí)際占用字節(jié)數(shù)
  /*1.創(chuàng)建字符*/
    var myString = '1234324 我的名字';

    /*2.抽取方法獲取實(shí)際占用的字節(jié)數(shù)*/
    function  getLength(str){
        /*2.1遍歷字符*/
        var length = 0;
        for(var i = 0;i < str.length;i++){
            /*2.2獲取每一個(gè)字符的Unicode編碼值*/
            var mySym = str.charCodeAt(i);
            if (mySym > 127){
                 length +=2;
            }else {
                length+=1;
            }
        }
        return length;

    }

    /*3.調(diào)用方法驗(yàn)證是否正確*/
   var result = getLength(myString);
    console.log(result);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末檐涝,一起剝皮案震驚了整個(gè)濱河市遏匆,隨后出現(xiàn)的幾起案子法挨,更是在濱河造成了極大的恐慌,老刑警劉巖幅聘,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凡纳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喊暖,警方通過(guò)查閱死者的電腦和手機(jī)惫企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)陵叽,“玉大人狞尔,你說(shuō)我怎么就攤上這事」簦” “怎么了偏序?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胖替。 經(jīng)常有香客問(wèn)我研儒,道長(zhǎng),這世上最難降的妖魔是什么独令? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任端朵,我火速辦了婚禮,結(jié)果婚禮上燃箭,老公的妹妹穿的比我還像新娘冲呢。我一直安慰自己,他們只是感情好招狸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布敬拓。 她就那樣靜靜地躺著,像睡著了一般裙戏。 火紅的嫁衣襯著肌膚如雪乘凸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天累榜,我揣著相機(jī)與錄音营勤,去河邊找鬼。 笑死壹罚,一個(gè)胖子當(dāng)著我的面吹牛冀偶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渔嚷,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼进鸠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了形病?” 一聲冷哼從身側(cè)響起客年,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤霞幅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后量瓜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體司恳,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年绍傲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扔傅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烫饼,死狀恐怖猎塞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杠纵,我是刑警寧澤荠耽,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站比藻,受9級(jí)特大地震影響铝量,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜银亲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一慢叨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧务蝠,春花似錦拍谐、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)力穗。三九已至毅弧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間当窗,已是汗流浹背够坐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留崖面,地道東北人元咙。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像巫员,于是被迫代替她去往敵國(guó)和親庶香。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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

  • 一简识、JS前言 (1)認(rèn)識(shí)JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu))赶掖,知道了CSS樣式(也稱為表示)感猛,會(huì)使用HT...
    凜0_0閱讀 2,770評(píng)論 0 8
  • 本文是針對(duì)剛學(xué)編程的小白,都是一些基礎(chǔ)知識(shí),如果想了解更多深層一點(diǎn)的東西,歡迎移步本人博客!! 博客地址 點(diǎn)擊跳轉(zhuǎn)...
    西巴擼閱讀 572評(píng)論 0 2
  • 一、自定義動(dòng)畫(huà) 延遲執(zhí)行start.style.animationDelay = delay + 's'; 二奢赂、U...
    LIT樂(lè)言閱讀 570評(píng)論 0 2
  • JavaScript 將字符串轉(zhuǎn)換為數(shù)字 parseInt() ◆只保留數(shù)字的整數(shù)部分陪白,不會(huì)進(jìn)行四舍五入運(yùn)算。 ...
    AkaTBS閱讀 985評(píng)論 0 9
  • 為了什么起的爭(zhēng)執(zhí)膳灶, 我已想不起咱士, 沖出房門(mén)的那一刻, 我已疼痛不已轧钓。 凌晨?jī)牲c(diǎn)半序厉, 雨一直在下, 打落在身上聋迎, 激...
    糖糖媽咪大寶貝閱讀 193評(píng)論 0 1