2017-3-18 JS学习笔记

2017-03-20  本文已影响0人  GodlinE

三大家族属性

获取浏览器窗口的宽度

window.innerHeight;
window.innerWidth;
document.documentElement.clientWidth;
document.documentElement.clientHeight;
document.body.clientWidth;
document.body.clientHeight;
//兼容写法
var screenW = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;

封装

function client(){
        if(window.innerWidth){
                  return {
                            width:window.innerWidth,
                            height:window.innerHeight
                  }
        }
       else if(document.compatMode ='CSS1Compat'){
                return {
                          width:document.documentElement.clientWidth,
                          height:document.documentElement.clientHeight
                }
        }
        else{
                return {
                          width:document.body.clientWidth,
                          height:document.body.clientHeight
                }
        }
}
//调用函数
var screenW = client().width;

窗口改变事件

window.onresize = function(){
        alert(0);
}

窗口改变事件应用

//程序运行时就触发颜色改变
changeBg();
//对于事件源触发事件后面的事情指令如果封装成方法不加括号
var bgColor = '';
window.onresize = changeBg;
//封装一个函数用来改变颜色
function changeBg(){
        var screenW = client().width;
        if(screenW > 900){
                  bgColor = 'red';
        }else if(screenW > 600){
                  bgColor = 'green';
        }else if(screenW > 300){
                  bgColor = 'blue';
        }        document.body.style.background:bgColor;
}

事件冒泡

   btn.onclick = function(){
            alert('我是按钮');
        }
        father.onclick = function(){
            alert('我是父亲');
        }
        document.onclick = function(){
            alert('我是最大事件源');
        }
//alert 会弹出来三次

阻止事件冒泡

//普通浏览器阻止冒泡方法
event.stopPropagation();
//ie 
event.cancelBubble = true;

冒泡事件的应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>冒泡事件的应用</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            border:none;
        }
        html,body{
            width:100%;
            height: 3000px;
        }
        #panel{
            width:100%;
            height:100%;
            position: absolute;
            left:0;
            top:0;
            background: #000;
            opacity: 0.4;
            /*用来兼容ie浏览器*/
            filter: alpha(opacity:40);
            display: none;
        }
        
        #login{
            width:200px;
            height: 200px;
            position: absolute;
            left:50%;
            top:50%;
            transform: translate(-50%,-50%);
            background: skyblue;
            display: none;
        }
    </style>
</head>
<body>
<button id="btn">登录</button>
<div id="panel"></div>
<div id="login"></div>
<script>
    window.onload = function(){
        /*0.抽取获取标签的函数*/
        function $(tagId){
            return typeof tagId ==='string'?document.getElementById(tagId):tagId;

        }
        /*1.获取标签*/
        var btn = $('btn');
        var panel = $('panel');
        var login  = $('login');
        /*2.点击按钮让对应的div显示*/
        btn.onclick = function(event){

            /*2.0为了达到我们想要的效果,我们需要阻止事件冒泡*/
            var event = event ||window.event;
            if(event &&event.stopPropagation){

                event.stopPropagation();
            }else {
                event.cancelBubble = true;
            }
            panel.style.display = 'block';
            login.style.display = 'block';

            /*2.1让对应的滚动条隐藏*/
            document.body.style.overflow = 'hidden';

        }
        /*3.点击最大事件源让对应的div隐藏*/
        document.onclick = function(event){

            /*当点击最大事件源的时候,让出来登录div其余的区域才会隐藏,我们需要判断点击的区域
            * 通过拿到事件的事件源的id来判断*/

            /*3.1获取事件对象*/
            var event = event ||window.event;
            /*3.2获取点击区域的事件源的id*/
            /*普通浏览器*/
//            event.target
//            ie
//            event.srcElement
            var targetId = event.target?event.target.id:event.srcElement.id;

            /*3.3判断对应的id*/
            if(targetId !='login'){
                panel.style.display = 'none';
                login.style.display = 'none';

                /*3.4让滚动条出现*/
                document.body.style.overflow  ='auto';
            }
        }
    }
</script>
</body>
</html>

获取选中内容

<script>
    window.onload = function(){
        /*1.获取标签*/
        var word1 = document.getElementById('word1');
        var word2 = document.getElementById('word2');
        var share_text = document.getElementById('share_text');
        var share_weibo = document.getElementById('share_weibo');
        /*2.当选中内容后,在鼠标抬起后出发对应的事件*/
        word1.onmouseup= function(event){
            /*2.0获取事件对象*/
            var event = event||window.event;
            /*2.1获取选中内容*/
            /*一般*/
//            window.getSelection()
            /*ie*/
//            document.selection.createRange().text;

            /*2.11设置变量用来记录选中的内容*/
            var content_text = '';
            if(window.getSelection){
              content_text = window.getSelection();
            }else {
               content_text = document.selection.createRange().text;
            }

            /*2.12设置div显示以及设置他的位置和文字*/
            share_text.innerHTML = content_text;
            share_text.style.left = event.clientX +'px';
            share_text.style.top = event.clientY +'px';
            share_text.style.display = 'block';
        }
        var content_weibo = '';

        /*2.2当在word2中抬起的时候出发对应的事件*/
        word2.onmouseup = function(event){

            /*2.21获取事件对象*/
            var event = event||window.event;
            if(window.getSelection){
                content_weibo = window.getSelection();
            }else {
                content_weibo = document.selection.createRange().text;
            }
         /*2.22让对应的微博图片显示*/
            share_weibo.style.display = 'block';
            share_weibo.style.left = event.clientX +'px';
            share_weibo.style.top = event.clientY +'px';
        }

        /*3.当点击document的时候,让对应的盒子隐藏而且让选中的内容不选中*/
        document.onmousedown = function(event){
            /*3.1让对应的盒子隐藏*/

            /*3.11让除了显示内容的区域点下去的时候隐藏,所以位哦们获取点击的区域的id*/
            var event = event ||window.event;
            var targetId = event.target?event.target.id:event.srcElement.id;
            if(targetId !='word1'){

                share_text.style.display = 'none';
            }
            if(targetId!='share_weibo'){
                share_weibo.style.display = 'none';

            }else {
                /*表示点击了微博,跳转分享界面*/
                window.location.href = 'http://v.t.sina.com.cn/share/share.php?searchPic=false&title=' + content_weibo + '&url=https://www.baidu.com'

            }
            /*3.2让选中的内容不选中*/
            window.getSelection?window.getSelection().removeAllRanges():document.selection.empty();
        }
    }
</script>

匀速动画改造注意点

box.style.left = box.offsetLeft + speed +'px';
if(target - box.offsetLeft < speed){
        clearInterval(timer);
        box.style.left = target + 'px';
}
//当 target 小于 boxoffsetLeft 时
if(Math.abs(target2 - box.offsetLeft) < Math.abs(speed2){
        clearInterval(timer2);
        box.style.left = target2 + 'px';
}

抽取匀速动画函数

function constant(obj,target,speed){
        clearInterval(timer);
        obj.timer = setInterval(function(){
                var mySpeed = target > obj.offsetLeft ? speed:-speed;
                obj.style.left = obj.offsetLeft + mySpeed +'px';
                if(Math.abs(target - obj.offsetLeft) < Math.abs(mySpeed)){
                clearInterval(timer);
                obj.style.left = target + 'px';
                }
        },20)
}

无限轮播图

<script>
    window.onload = function(){

        /*0.设置一个值用来记录将要显示的图片*/
        var currentIndex = 0;
        /*0.1设置一个值用来表示小圆点显示第几个*/
        var indicateIndex = 0;
        /*1.获取标签*/
        var oul = document.getElementById('oul');
        var ol = document.getElementById('ol');
        /*1.0获取oul中原来的个数*/
        var lis = oul.children;
        /*1.1添加最后的图片*/
        oul.appendChild(oul.children[0].cloneNode(true));



        /*2.添加小的圆点*/
        for(var i = 0;i < lis.length -1;i++){

            var oli = document.createElement('li');
            ol.appendChild(oli);
        }

        /*2.1s设置第一个为红色*/
        ol.children[0].className = 'curr';

        /*2.2当移动到小圆点上的时候,让对应的小圆点的颜色发生变化,就是一拍他思想*/


        for(var i = 0;i < ol.children.length;i++){
            /*2.2扩展属性用来记录i*/
            ol.children[i].index = i;
           ol.children[i].onmouseover = function(){
               for(var j =0;j < ol.children.length;j++){
                   ol.children[j].className = '';
               }

              ol.children[this.index].className = 'curr';

               /*2.3让对应的图片动起来*/
               constant(oul,-this.index *750,20);

               /*2.4当移动到小圆点的时候,应该切换对应的currIndex以及indicateIndex*/
               currentIndex = this.index;
               indicateIndex = this.index;
           }
        }

        /*3.让自动动起来*/
        var timer = setInterval(auto_play,1000);
        function  auto_play(){
            currentIndex ++;
            if (currentIndex > lis.length -1)
            {
                currentIndex = 1;
                oul.style.left = 0;
            }

            /*动起来*/
            constant(oul,-currentIndex*750,20);

            /*设置小圆点的颜色*/
            indicateIndex ++;
            if (indicateIndex > ol.children.length  -1){
                indicateIndex  = 0;
            }
            for(var i = 0;i < ol.children.length;i++){

                ol.children[i].className = '';
            }
           ol.children[indicateIndex].className = 'curr';
        }
    }
</script>

克隆节点

var cloneBox = box.cloneNode(true);
//添加克隆节点
document.body.appendChild(cloneBox);
上一篇下一篇

猜你喜欢

热点阅读