2017-3-15 JS 学习笔记

滚动事件的认识

  • 实际开发中,我们经常需要监听滚动事件
  • 滚动事件一般是由 window 来触发
window.onscroll = function(){
        //获取滚动的距离
        var myScrolltop = document.documentElement.scrollTop || document.body.scrollTop;
        console.log(myScrollTop);
}        

不同浏览器中获取滚动距离的方式

  • 在 ie9 以及新的版本
var scrollT = window.pageYOffset;
  • 在火狐以及符合 w3c 标准的浏览器
var scrollT = document.documentElement.scrollTop;
  • 谷歌浏览器以及没有定义 DTD
var scrollT = document.body.scrollTop;
var myScrollT = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
scroll().top;
scroll().left;
  • 抽取滚动距离的方法
//抽取方法用来获取滚动的距离
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
        }
}

瀑布流的注意点

  • 获取第一行的高度最短的盒子
  • 将后面的盒子放置到高度最短的盒子下方
  • 更新最短盒子的高度,再次寻找最短盒子,此处创建函数来执行*
  • 当滚动的距离 + 屏幕的高度 >= 最后一个盒子的 offsetTop + 最后一个盒子高度的一半的时候,开始加载图片(此处设定临界值自由设置),此处创建函数来判断
  • 加载图片就是动态创建添加盒子,数据是存放在字典中的
  • 加载之后再次调用 * 处的函数,让图片正确排版
<!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>
  • 滚动到某个位置
window.scrollTo(0,800);
//第一个参数表示水平滚动,第二个参数表示垂直滚动

window 的内置对象

  • 任何一个全局变量都是 window 的属性
  • 任何一个全局函数都是 window 的方法
  • 注意不要在 window.onload 方法使用 window 获取全局的属性和方法
console.log(window.dog);
window.sum();

字符串的常见方法

  • 创建字符串
var myString = 'my敏感体质';
  • 获取某一个字符的位置
    如果获取某个字符的位置,这个字符有多个,那么获取是第一个的位置
//indexOf:从左到右获取字符的位置,顺序是从左到右
var index = myString.indexOf('a');
//lastIndexOf: 从右到左获取字符的位置,结果顺序是从左到右
var lastI = myString.lastIndexOf('a');
  • 获取某个位置的字符
//charAt:获取某个位置的字符
var mySym = myString.charAt(1);
//myCodeSym:获取某个字符的 Unicode 编码
//但凡汉子转化成 Unicode 编码值是大于 127 的
var myCodeSym = myString.charCodeAt(1);
//获取字符的长度
console.log(myString.length);
  • 获取字符的实际占用字节数
  /*1.创建字符*/
    var myString = '1234324 我的名字';

    /*2.抽取方法获取实际占用的字节数*/
    function  getLength(str){
        /*2.1遍历字符*/
        var length = 0;
        for(var i = 0;i < str.length;i++){
            /*2.2获取每一个字符的Unicode编码值*/
            var mySym = str.charCodeAt(i);
            if (mySym > 127){
                 length +=2;
            }else {
                length+=1;
            }
        }
        return length;

    }

    /*3.调用方法验证是否正确*/
   var result = getLength(myString);
    console.log(result);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容

  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,749评论 0 8
  • 本文是针对刚学编程的小白,都是一些基础知识,如果想了解更多深层一点的东西,欢迎移步本人博客!! 博客地址 点击跳转...
    西巴撸阅读 548评论 0 2
  • 一、自定义动画 延迟执行start.style.animationDelay = delay + 's'; 二、U...
    LIT乐言阅读 564评论 0 2
  • JavaScript 将字符串转换为数字 parseInt() ◆只保留数字的整数部分,不会进行四舍五入运算。 ...
    AkaTBS阅读 972评论 0 9
  • 为了什么起的争执, 我已想不起, 冲出房门的那一刻, 我已疼痛不已。 凌晨两点半, 雨一直在下, 打落在身上, 激...
    糖糖妈咪大宝贝阅读 188评论 0 1