DOM-事件对象8

F353D145-8D92-4BE2-ACA0-67ABC6FEBED7.png
AFF6341C-65B3-4CF6-8C16-0FE9D8024C16.png
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>


    <script>
        //点击页面的任何部分
         document.onclick = function (event) {
             //兼容写法
             event = event || window.event;
//            console.log(event);
            console.log(event);
            console.log(event.timeStamp);
            console.log(event.bubbles);
            console.log(event.button);
            console.log(event.pageX);
            console.log(event.pageY);
            console.log(event.screenX);
            console.log(event.screenY);
            console.log(event.target);
            console.log(event.type);
            console.log(event.clientX);
            console.log(event.clientY);

         }

    </script>
</body>
</html>

04-鼠标跟随.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        body {
            height: 5000px;
        }
        img {
            position: absolute;
            padding: 10px 0;
            border: 1px solid #ccc;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <img src="images/img.jpg" width="100"/>

    <script>
        //需求:点击页面的任何地方,图片跟随鼠标移动到点击位置。
        //思路:获取鼠标在页面中的位置,然图片缓慢运动到鼠标点击的位置。
        //  兼容ie67做pageY和pageX;
        //  原理:     鼠标在页面的位置 = 被卷去的部分+可视区域部分。
        //步骤:
        //1.老三步。
        //2.获取鼠标在页面中的位置。
        //3.利用缓动原理,慢慢的运动到指定位置。(包括左右和上下)

        //1.老三步。
        var img = document.getElementsByTagName("img")[0];
        var timer = null;
        var targetx = 0;var targety = 0;
        var leaderx = 0;var leadery = 0;
        //给整个文档绑定点击事件获取鼠标的位置。
        document.onclick = function (event) {
            //新五步
            //兼容获取事件对象
            event = event || window.event;
            //鼠标在页面的位置 = 被卷去的部分+可视区域部分。
            var pagey = event.pageY || scroll().top + event.clientY;
            var pagex = event.pageX || scroll().left + event.clientX;

            //要用定时器,先清定时器
//            targety = pagey-img.offsetHeight/2;
//            targetx = pagex-img.offsetWidth/2;
            targety = pagey-30;
            targetx = pagex-50;
            clearInterval(timer);
            timer = setInterval(function () {
                //为盒子的位置获取值
                leaderx = img.offsetLeft;
                //获取步长
                var stepx = (targetx-leaderx)/10;
                //二次处理步长
                stepx = stepx>0?Math.ceil(stepx):Math.floor(stepx);
                leaderx = leaderx + stepx;
                //赋值
                img.style.left = leaderx + "px";


                //为盒子的位置获取值
                leadery = img.offsetTop;
                //获取步长
                var stepy = (targety-leadery)/10;
                //二次处理步长
                stepy = stepy>0?Math.ceil(stepy):Math.floor(stepy);
                leadery = leadery + stepy;
                //赋值
                img.style.top = leadery + "px";
                //清定时器

//                if(Math.abs(targety-img.offsetTop)<=Math.abs(stepy) && Math.abs(targetx-img.offsetLeft)<=Math.abs(stepx)){
//                    img.style.top = targety + "px";
//                    img.style.left = targetx + "px";
//                    clearInterval(timer);
//                }
            },30);
        }
        //2.获取鼠标在页面中的位置。
        //3.利用缓动原理,慢慢的运动到指定位置。(先左右后上下)


    </script>



</body>
</html>

05-鼠标在盒子中的坐标.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .box  {
            width: 300px;
            height: 200px;
            padding-top: 100px;
            background-color: pink;
            margin: 100px;
            text-align: center;
            font: 18px/30px "simsun";
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div class="box">

    </div>

    <script src="animate.js"></script>
    <script>
        //需求:鼠标进入盒子之后只要移动,哪怕1像素,随时更换里面的内容。(鼠标在盒子中的坐标)
        //技术点:新事件,onmousemove.在事件源上哪怕移动1像素也会触动这个事件。
            //一定程度上,模拟了定时器
        //步骤:
        //1.老三步和新五步
        //2.获取鼠标在整个页面的位置
        //3.获取盒子在整个页面的位置
        //4.用鼠标的位置减去盒子的位置赋值给盒子的内容。

        //1.老三步和新五步
        var div = document.getElementsByTagName("div")[0];

        div.onmousemove = function (event) {
            event = event || window.event;
            //2.获取鼠标在整个页面的位置
            var pagex = event.pageX || scroll().left + event.clientX;
            var pagey = event.pageY || scroll().top + event.clientY;
            //3.获取盒子在整个页面的位置
            var xx = div.offsetLeft;
            var yy = div.offsetTop
            //4.用鼠标的位置减去盒子的位置赋值给盒子的内容。
            var targetx = pagex - xx;
            var targety = pagey - yy;
            this.innerHTML = "鼠标在盒子中的X坐标为:"+targetx+"px;<br>鼠标在盒子中的Y坐标为:"+targety+"px;"

        }

    </script>

</body>
</html>

07-拖拽案例.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .nav {
            height: 30px;
            background: #036663;
            border-bottom: 1px solid #369;
            line-height: 30px;
            padding-left: 30px;
        }

        .nav a {
            color: #fff;
            text-align: center;
            font-size: 14px;
            text-decoration: none;

        }

        .d-box {
            width: 400px;
            height: 300px;
            border: 5px solid #eee;
            box-shadow: 2px 2px 2px 2px #666;
            position: absolute;
            top: 40%;
            left: 40%;
        }

        .hd {
            width: 100%;
            height: 25px;
            background-color: #7c9299;
            border-bottom: 1px solid #369;
            line-height: 25px;
            color: white;
            cursor: move;
        }

        #box_close {
            float: right;
            cursor: pointer;
        }
    </style>

    <script src="animate.js"></script>
    <script>
        window.onload = function () {
            //需求:在指定位置按住鼠标左键移动对话框。
            //分析:鼠标按下,触动事件,移动在更换对话框的位置。
            //鼠标按下onmousedown   鼠标弹起:onmouseup   鼠标移动onmousemove
            //步骤:
            //1.老三步和新五步
            //2.把鼠标的坐标赋值给对话框。

            var box = document.getElementById("d_box");
            var drop = document.getElementById("drop");
            //1.老三步和新五步
            //先按下,在移动触动此事件
            drop.onmousedown = function (event) {
                //获取鼠标在盒子中的坐标,将来移动的时候减去保证鼠标在盒子的指定位置
                event = event || window.event;
                var pagex = event.pageX || scroll().left + event.clientX;
                var pagey = event.pageY || scroll().top + event.clientY;
                var x = pagex - box.offsetLeft;
                var y = pagey - box.offsetTop;


                document.onmousemove = function (event) {
                    //2.把鼠标的坐标赋值给对话框。
                    event = event || window.event;
                    var xx = event.pageX || scroll().left + event.clientX;
                    var yy = event.pageY || scroll().top + event.clientY;
                    //二次操作鼠标位置  减去鼠标在盒子中的坐标
                    xx = xx - x;
                    yy = yy - y;

                    //给box赋值
                    box.style.left = xx+"px";
                    box.style.top = yy+"px";
                    //禁止文本选中(选中后取消)
                    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
                }
            }

            //事件解绑
            drop.onmouseup = function () {
                //解绑
                document.onmousemove = null;
            }


        }
    </script>

</head>
<body>
<!--顶部注册部分,无用-->
    <div class="nav">
        <a href="javascript:;" id="register">注册信息</a>
    </div>
<!--我们移动的对话框-->
    <div class="d-box" id="d_box">
        <div class="hd" id="drop">
            <i>注册信息 (可以拖拽)</i>
            <span id="box_close">【关闭】</span>
        </div>
        <div class="bd"></div>
    </div>

</body>
</html>


08-模拟滚动条.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            width: 300px;
            height: 500px;
            border: 1px solid red;
            margin: 50px auto;
            overflow: hidden;
            position: relative;
        }
        .scroll {
            width: 20px;
            height: 530px;
            background-color: #ccc;
            position: absolute;
            top: 0;
            right: 0;
        }
        .bar {
            width: 20px;
            background-color: red;
            border-radius: 10px;
            cursor: pointer;
            position: absolute;
            top: 0;
        }
        .content {
            padding: 15px;
        }
    </style>

    <script src="animate.js"></script>
    <script>
        window.onload = function () {
            //需求:模拟滚动条,鼠标拖动滚动条,滚动条动,而且内容等比例联动。
            //步骤:
            //1.根据内容和盒子的比例确定bar的高。
            //2.绑定事件(鼠标按下,然后移动)
            //3.鼠标移动,bar联动
            //4.内容等比例联动


            //0.获取相关元素
            var box = document.getElementById("box");
            var content = box.children[0];
            var scroll = box.children[1];
            var bar = scroll.children[0];

            //1.根据内容和盒子的比例确定bar的高。
            //内容的高/盒子的高 = scroll的高/bar的高
            //bar的高 = 盒子的高*scroll的高/内容的高
            var barHeight = box.offsetHeight*scroll.offsetHeight/content.offsetHeight;
            bar.style.height = barHeight + "px";
            //2.绑定事件(鼠标按下,然后移动)
            bar.onmousedown = function (event) {
                event = event || window.event;
                var pageyy = event.pageY || scroll().top + event.clientY;
                var y = pageyy - bar.offsetTop;
                //模拟拖拽案例
                document.onmousemove = function (event) {
                    //新五步获取鼠标在页面的位置。
                    event = event || window.event;
                    var pagey = event.pageY || scroll().top + event.clientY;
                    //鼠标的位置-鼠标在盒子中的位置。
                    pagey = pagey - y;
                    //限制y的取值。大于0,小于scroll的高度-bar的高度
                    if(pagey<0){
                        pagey = 0;
                    }
                    if(pagey>scroll.offsetHeight-bar.offsetHeight){
                        pagey = scroll.offsetHeight-bar.offsetHeight;
                    }

                    //3.鼠标移动,bar联动
                    bar.style.top = pagey + "px";

                    //4.内容等比例联动
                    //高级比例:  内容走的距离/bar走的距离 = (内容的高-大盒子的高)/(scroll的高-bar的高)
                    var s = pagey *(content.offsetHeight-box.offsetHeight)/(scroll.offsetHeight-bar.offsetHeight);
                    //s赋值给content。通过marginTop负值移动content
                    content.style.marginTop = -s+"px";

                    //让被选文字清除。
                    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
                }
            }

            //事件解绑
            document.onmouseup = function () {
                document.onmousemove = null;
            }

        }
    </script>

</head>
<body>
    <div class="box" id="box">
        <div class="content">
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            孩儿励志出湘关,学不成名终不还。<br>
            埋骨何须桑梓地,人生无处不青山。<br>
            -------------结束------------<br>
        </div>
        <div class="scroll">
            <div class="bar"></div>
        </div>
    </div>



</body>
</html>

06-放大镜

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            width: 350px;
            height: 350px;
            margin:100px;
            border: 1px solid #ccc;
            position: relative;
        }
        .big {
            width: 400px;
            height: 400px;
            position: absolute;
            top: 0;
            left: 360px;
            border: 1px solid #ccc;
            overflow: hidden;
            display: none;
        }
        .mask {
            width: 175px;
            height: 175px;
            background: rgba(255, 255, 0, 0.4);
            position: absolute;
            top: 0;
            left: 0;
            cursor: move;
            display: none;
        }
        .small {
            position: relative;
        }
        img {
            vertical-align: top;
        }
    </style>

    <script src="animate.js"></script>
    <script>
        window.onload = function () {
            //需求:鼠标放到小盒子上,让大盒子里面的图片和我们同步等比例移动。
            //技术点:onmouseenter==onmouseover 第一个不冒泡
            //技术点:onmouseleave==onmouseout  第一个不冒泡
            //步骤:
            //1.鼠标放上去显示盒子,移开隐藏盒子。
            //2.老三步和新五步(黄盒子跟随移动)
            //3.右侧的大图片,等比例移动。

            //0.获取相关元素
            var box = document.getElementsByClassName("box")[0];
            var small = box.firstElementChild || box.firstChild;
            var big = box.children[1];
            var mask = small.children[1];
            var bigImg = big.children[0];

            //1.鼠标放上去显示盒子,移开隐藏盒子。(为小盒子绑定事件)
            small.onmouseenter = function () {
                //封装好方法调用:显示元素
                show(mask);
                show(big);
            }
            small.onmouseleave = function () {
                //封装好方法调用:隐藏元素
                hide(mask);
                hide(big);
            }

            //2.老三步和新五步(黄盒子跟随移动)
            //绑定的事件是onmousemove,而事件源是small(只要在小盒子上移动1像素,黄盒子也要跟随)
            small.onmousemove = function (event) {
                //想移动黄盒子,必须知道鼠标在small中的位置。x作为mask的left值,y作mask的top值。
                //新五步
                event = event || window.event;
                var pagex = event.pageX || scroll().left + event.clientX;
                var pagey = event.pageY || scroll().top + event.clientY;
                //让鼠标在黄盒子最中间,减去黄盒子宽高的一半
                var x = pagex - box.offsetLeft - mask.offsetWidth/2;
                var y = pagey - box.offsetTop - mask.offsetHeight/2;
                //限制换盒子的范围
                //left取值为大于0,小盒子的宽-mask的宽。
                if(x<0){
                    x = 0;
                }
                if(x>small.offsetWidth-mask.offsetWidth){
                    x = small.offsetWidth-mask.offsetWidth;
                }
                //top同理。
                if(y<0){
                    y = 0;
                }
                if(y>small.offsetHeight-mask.offsetHeight){
                    y = small.offsetHeight-mask.offsetHeight;
                }
                //移动黄盒子
                console.log(small.offsetHeight);
                mask.style.left = x + "px";
                mask.style.top = y + "px";

                //3.右侧的大图片,等比例移动。
                //如何移动大图片?等比例移动。
                //    大图片/大盒子 = 小图片/mask盒子
                //    大图片走的距离/mask走的距离 = (大图片-大盒子)/(小图片-黄盒子)
//                var bili = (bigImg.offsetWidth-big.offsetWidth)/(small.offsetWidth-mask.offsetWidth);

                //大图片走的距离/mask盒子都的距离 = 大图片/小图片
                var bili = bigImg.offsetWidth/small.offsetWidth;

                var xx = bili*x;
                var yy = bili*y;


                bigImg.style.marginTop = -yy+"px";
                bigImg.style.marginLeft = -xx+"px";
            }





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

推荐阅读更多精彩内容