预加载、延迟加载、瀑布流、拖拽

1.预加载-图片:

自己偷偷地加载
预加载的原理
     var img =  new Image()
     img.src = '';
     //页面上放很多img,设置成隐藏

     img.onload=function(){
        //加载完成了
     };
     img.onerror = funciton(){
        //加载出错了
     }

例子:
    <style>
        #div1{
            width:800px;
            height: 50px;
            background: #ccc;
            position: relative;

        }
        #div2{
            width: 1px;
            height: 100%;
            background: red;
            position: absolute;
            left: 0;
            top:0;
        }
    </style>
    <script>
        window.onload = function(){
            var oDiv1 = document.getElementById('div1');
            var oDiv2 = document.getElementById('div2');

            var count = 1;
            for(var  i = 0; i < 77; i++){

                var img = new Image();
                //img.src = 'images/'+i+'.jpg';
                img.src = 'http://www.zhinengshe.com/works/3525/img/'+i+'.jpg';

                img.onload = function(){
                    count++;
                    var scale = count / 77;
                    oDiv2.style.width = oDiv1.offsetWidth * scale + 'px';

                };

                if(count == 77){
                    //alert('加载完了!');
                }
            }};



    </script>
</head>
<body>
<div id="div1">
    <div id="div2"></div>
</div>
</body>


2.延迟加载

延迟加载:
    obj.offsetTop < 可视区高度 + 滚动距离;
    obj.offsetTop < document.documentElement.clientHeight +
        (document.documentElement.scrollTop || document.body.scrollTop);

例子:
    <style>
        *{margin:0;padding:0;list-style:none;}
        li{
            width: 200px;
            height: 200px;
            border: 1px solid #000;
            float: left;
            margin:10px;
        }
        img{
            width: 100%;
            height:100%;

        }
    </style>
    <script>
        window.onresize =  window.onscroll =  window.onload = function(){
            var aImg = document.getElementsByTagName('img');

            for(var i = 0; i < aImg.length; i++){
                //可视区高度
                var clientHeight = document.documentElement.clientHeight;
                //滚动距离
                var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

                if(aImg[i].offsetTop < (clientHeight+scrollTop)){
                    //加载aImg[i]
                    //console.log(aImg[i].getAttribute('_src'));
                    aImg[i].src = aImg[i].getAttribute('_src');
                }
            }



        };
    </script>
</head>
<body>
<ul>
    <li><img _src="img/b1.jpg"  alt=""></li>
    <li><img _src="img/b2.jpg" alt=""></li>
    <li><img _src="img/b3.jpg" alt=""></li>
    <li><img _src="img/b4.jpg" alt=""></li>
    <li><img _src="img/b5.jpg" alt=""></li>
    <li><img _src="img/b6.jpg" alt=""></li>
    <li><img _src="img/b7.jpg" alt=""></li>
    <li><img _src="img/b8.jpg" alt=""></li>
    <li><img _src="img/b9.jpg" alt=""></li>
    <li><img _src="img/b10.jpg" alt=""></li>
</ul>

</body>

3.瀑布流

瀑布流:

物体大小:

    高度:
        obj.offsetHeight
        obj.scrollHeight
            当内容高度大于盒模型高度时-->内容高度
            当内容高度小于盒模型高度时-->盒模型高度

瀑布流求ul最短
    var arr = [];
    arr.push(1,3,9,2,100);
    arr.push(div1,div2,div3..);
    arr.push(小明,班长);

    arr.sort(function(){
        //默认只会比字符串  字典序
        //想比数字,还是按字典序  n1,n2-->  n1-n2
        
    });
    arr.sort(function(n1,n2){
        return n1-n2;
    });
    arr.sort(function(人1,人2){
        return 人1.身高-人2.身高;
    });

    arrUl = [ul1,ul2,ul3];
    arrUL.sort(function(ULa,ULb){
        return ULa.offsetHeight -  ULb.offsetHeight;
    });

例子:
    <style>
        *{margin:0;padding:0;list-style:none;}
        ul{
            width: 200px;
            border:1px solid #000;
            float:left;
            margin:10px;
        }
        li{
            width: 180px;
            height: 200px;
            background: red;
            margin:10px;
        }
    </style>
    <script>
        function rnd(n,m){return parseInt(Math.random()*(m-n)) + n;}
        window.onload = function(){
            var aUl = document.getElementsByTagName('ul');

            function createLI(){
                var oLi = document.createElement('li');
                oLi.style.height = rnd(100,500) + 'px';
                oLi.style.background = 'rgb('+rnd(0,256)+','+rnd(0,256)+','+rnd(0,256)+')';
                return oLi;
            }
            function createLI20(){
                for(var i = 0; i < 20; i++){
                    var oLi = createLI();
                    var arrUl = [];
                    for(var j = 0; j<aUl.length; j++){
                        arrUl.push(aUl[j]);
                    }

                    arrUl.sort(function(n1,n2){
                        return n1.offsetHeight - n2.offsetHeight;
                    });
                    arrUl[0].appendChild(oLi)
                }
            }

            //如果走到最后了,再弄20个li,加到页面上
            createLI20();
            //当整个页面的高度 >  可视区+滚动距离
            //alert(document.documentElement.scrollHeight);

            window.onscroll = function(){
                //可视区高度
                var clientH = document.documentElement.clientHeight;
                //滚动距离
                var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

                //可视区底边
                var clientBottom = clientH + scrollTop;
                //页面内容高度
                var pageHeight = document.documentElement.scrollHeight;
                document.title = pageHeight + ',' + clientBottom;
                if(pageHeight <= clientBottom){
                    alert(pageHeight + ',' + clientBottom);
                    createLI20();
                }
            };
        };
    </script>
</head>
<body>
<ul></ul>
<ul></ul>
<ul></ul>
</body>

4.拖拽

拖拽:
    大象放冰箱:
        1)打开冰箱门
        2)把大象放进去
        3)把门关上
    拖拽:
        1)鼠标按下
        2)鼠标移动
        3)鼠标松开
    新事件:
        按下:  onmousedown
        移动:  onmousemove
        松开:  onmouseup

阻止默认行为:
    return false;
        兼容:chrome  ff  ie9+
    针对低级浏览器:
        事件捕获
            obj.setCapture();
磁性吸附例子:
   <style>
        *{margin:0; padding:0;}
        #div1{
            width: 100px;
            height: 100px;
            background: red;
            position: absolute;
            left:200px;
            top:200px;
        }
    </style>
    <script>
        window.onload = function(){
            var oDiv = document.getElementById('div1');
            oDiv.onmousedown = function(ev){
                var oEvent = ev || event;
                var disX = oEvent.clientX - oDiv.offsetLeft;
                var disY = oEvent.clientY - oDiv.offsetTop;
                document.onmousemove = function(ev){
                    var oEvent = ev || event;
                    var l = oEvent.clientX - disX;
                    var t = oEvent.clientY  - disY;

                    if(l <= 100){
                        l = 0;
                    }
                    if (l >= (document.documentElement.clientWidth - oDiv.offsetWidth-100)){
                        l = document.documentElement.clientWidth - oDiv.offsetWidth;
                    }
                    if(t <= 100){
                        t = 0;
                    }
                    if(t >= (document.documentElement.clientHeight - oDiv.offsetHeight-100)){
                        t = document.documentElement.clientHeight - oDiv.offsetHeight;
                    }


                    oDiv.style.left = l + 'px';
                    oDiv.style.top = t + 'px';
                };
                document.onmouseup = function(){
                    document.onmousemove = null;
                    document.onmouseup = null;
                    oDiv.releaseCapture && oDiv.releaseCapture();
                };
                oDiv.setCapture && oDiv.setCapture();
                return false;

            };
        };
    </script>
</head>
<body>
<div id="div1"></div>
</body>

虚线框拖拽
    <style>
        *{margin:0; padding:0;}
        #div1{
            width: 100px;
            height: 100px;
            background: yellow;
            position: absolute;
        }
    </style>
    <script>
        window.onload = function(){
            var oDiv = document.getElementById('div1');

            var border = 3;
            oDiv.onmousedown = function(ev){
                var oEvent = ev || event;

                //创建一个虚线框 div 有边框
                var newDiv = document.createElement('div');
                newDiv.style.width = oDiv.offsetWidth - border*2 + 'px';
                newDiv.style.height = oDiv.offsetHeight - border*2 + 'px';
                newDiv.style.position = 'absolute';
                newDiv.style.left = oDiv.offsetLeft + 'px';
                newDiv.style.top = oDiv.offsetTop + 'px';
                newDiv.style.border = border + 'px dashed red';

                document.body.appendChild(newDiv);

                var disX = oEvent.clientX - oDiv.offsetLeft;
                var disY = oEvent.clientY - oDiv.offsetTop;
                document.onmousemove = function(ev){
                    var oEvent = ev || event;
                    var l = oEvent.clientX - disX;
                    var t = oEvent.clientY  - disY;

                    if(l <= 0){
                        l = 0;
                    }
                    if (l >= (document.documentElement.clientWidth - oDiv.offsetWidth)){
                        l = document.documentElement.clientWidth - oDiv.offsetWidth;
                    }
                    if(t <= 0){
                        t = 0;
                    }
                    if(t >= (document.documentElement.clientHeight - oDiv.offsetHeight)){
                        t = document.documentElement.clientHeight - oDiv.offsetHeight;
                    }


                    newDiv.style.left = l + 'px';
                    newDiv.style.top = t + 'px';
                };
                document.onmouseup = function(){
                    oDiv.style.left = newDiv.offsetLeft + 'px';
                    oDiv.style.top = newDiv.offsetTop + 'px';
                    document.body.removeChild(newDiv);


                    document.onmousemove = null;
                    document.onmouseup = null;
                    oDiv.releaseCapture && oDiv.releaseCapture();
                };
                oDiv.setCapture && oDiv.setCapture();
                return false;

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

推荐阅读更多精彩内容