美文网首页H5^Study
JS基础学习:图片跟着鼠标飞(最终)/案例复习/拖拽对话框/滚动

JS基础学习:图片跟着鼠标飞(最终)/案例复习/拖拽对话框/滚动

作者: Merbng | 来源:发表于2019-04-15 20:29 被阅读0次

目录

  • 图片跟着鼠标飞案例----最终版本---兼容代码的封装
  • 拖拽案例----
  • 滚动条案例---
  • 放大镜的案例---

案例:图片跟着鼠标飞

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        
        <style>
            body{
                height: 10000px;
            }
            img{
                position: absolute;
            }
        </style>
    </head>
    <body>
        <img id="im" src="images/01.jpg" alt="">
        <script src="js/common.js"></script>
        <script>
            document.onmousemove = function(e) {
                // my$('im').style.left = e.clientX + "px";
                // my$('im').style.top = e.clientY + "px";
                // 最终的代码
                my$('im').style.left = evt.getPageX(e) + "px";
                my$('im').style.top = evt.getPageY(e) + "px";
            };
        </script>
        <script type="text/javascript">
            // 把代码封装在一个函数中
            var evt = {
                // window.event和事件参数对象e的兼容
                getEvent: function(evt) {
                    return window.event || evt;
                },
                // 可视区域的横坐标的兼容代码
                getClientX: function(evt) {
                    return this.getEvent(evt).clientX;
                },
                // 可视区域纵坐标的兼容代码
                getClientY: function(evt) {
                    return this.getEvent(evt).clientY;
                },
                // 页面向左卷曲出去的横坐标
                getScrollLeft: function() {
                    return window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0;
                },
                // 页面向上卷曲出去的纵坐标
                getScrollTop: function() {
                    return window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0;
                },
                // 相当于页面的横坐标(pageX或者是clientX+scrollLeft))
                getPageX: function(evt) {
                    return this.getEvent(evt).pageX ? this.getEvent(evt).pageX : this.getClientX(evt) + this.getScrollLeft();
                },
                getPageY: function(evt) {
                    return this.getEvent(evt).pageY ? this.getEvent(evt).pageY : this.getClientY(evt) + this.getScrollTop();
                }
            }
        </script>
    </body>
</html>

案例:拖拽的对话框

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            .login-header {
      width: 100%;
      text-align: center;
      height: 30px;
      font-size: 24px;
      line-height: 30px;
    }

    ul, li, ol, dl, dt, dd, div, p, span, h1, h2, h3, h4, h5, h6, a {
      padding: 0px;
      margin: 0px;
    }

    .login {
      width: 512px;
      position: absolute;
      border: #ebebeb solid 1px;
      height: 280px;
      left: 50%;
      right: 50%;
      background: #ffffff;
      box-shadow: 0px 0px 20px #ddd;
      z-index: 9999;
      margin-left: -250px;
      margin-top: 140px;
      display: none;
    }

    .login-title {
      width: 100%;
      margin: 10px 0px 0px 0px;
      text-align: center;
      line-height: 40px;
      height: 40px;
      font-size: 18px;
      position: relative;
      cursor: move;
      -moz-user-select: none; /*火狐*/
      -webkit-user-select: none; /*webkit浏览器*/
      -ms-user-select: none; /*IE10*/
      -khtml-user-select: none; /*早期浏览器*/
      user-select: none;
    }

    .login-input-content {
      margin-top: 20px;
    }

    .login-button {
      width: 50%;
      margin: 30px auto 0px auto;
      line-height: 40px;
      font-size: 14px;
      border: #ebebeb 1px solid;
      text-align: center;
    }

    .login-bg {
      width: 100%;
      height: 100%;
      position: fixed;
      top: 0px;
      left: 0px;
      background: #000000;
      filter: alpha(opacity=30);
      -moz-opacity: 0.3;
      -khtml-opacity: 0.3;
      opacity: 0.3;
      display: none;
    }

    a {
      text-decoration: none;
      color: #000000;
    }

    .login-button a {
      display: block;
    }

    .login-input input.list-input {
      float: left;
      line-height: 35px;
      height: 35px;
      width: 350px;
      border: #ebebeb 1px solid;
      text-indent: 5px;
    }

    .login-input {
      overflow: hidden;
      margin: 0px 0px 20px 0px;
    }

    .login-input label {
      float: left;
      width: 90px;
      padding-right: 10px;
      text-align: right;
      line-height: 35px;
      height: 35px;
      font-size: 14px;
    }

    .login-title span {
      position: absolute;
      font-size: 12px;
      right: -20px;
      top: -30px;
      background: #ffffff;
      border: #ebebeb solid 1px;
      width: 40px;
      height: 40px;
      border-radius: 20px;
    }


  </style>

    </head>
    <body>
        <div class="login-header"><a id="link" href="javascript:void(0);">点击,弹出登录框</a></div>
        <div id="login" class="login">
            <div id="title" class="login-title">登录会员
                <span><a id="closeBtn" href="javascript:void(0);" class="close-login">关闭</a></span></div>
            <div class="login-input-content">
                <div class="login-input">
                    <label>用户名:</label>
                    <input type="text" placeholder="请输入用户名" name="info[username]" id="username" class="list-input">
                </div>
                <div class="login-input">
                    <label>登录密码:</label>
                    <input type="password" placeholder="请输入登录密码" name="info[password]" id="password" class="list-input">
                </div>
            </div>
            <div id="loginBtn" class="login-button"><a href="javascript:void(0);" id="login-button-submit">登录会员</a></div>
        </div>
        <!--登录框-->
        <div id="bg" class="login-bg"></div>
        <!--遮挡层-->
        <script src="js/common.js"></script>
        <script type="text/javascript">
            // 获取超链接.注册点击事件,显示登录框和遮罩层
            my$('link').onclick = function() {
                my$('login').style.display = "block";
                my$('bg').style.display = "block";
            }
            // 获取关闭,注册点击事件,隐藏登录框和遮罩层
            my$('closeBtn').onclick = function() {
                my$('login').style.display = "none";
                my$('bg').style.display = "none";
            };
            // 按下鼠标,移动鼠标,移动登录框
            my$('title').onmousedown = function(e) {
                //获取此时的可视区域的横坐标-此时登录框距离左侧页面的横坐标
                var spaceX = e.clientX - my$("login").offsetLeft;
                var spaceY = e.clientY - my$("login").offsetTop;


                //移动的事件
                document.onmousemove = function(e) {
                    //新的可视区域的横坐标-spaceX=====>新的 值----登录框的left属性
                    var x = e.clientX - spaceX + 250;
                    var y = e.clientY - spaceY - 140;
                    my$('login').style.left = x + "px";
                    my$('login').style.top = y + "px";
                };
                document.onmouseup = function() {
                    document.onmousemove = null;
                };
            };
        </script>
    </body>
</html>

案例:组织超链接跳转

<!DOCTYPE html>
<html lang="zh">
    <head>
        <title></title>
    </head>
    <body>
        <a href="http://www.baidu.com" id="ak">百度</a>
        <script src="js/common.js"></script>
        <script type="text/javascript">
            my$('ak').onclick = function() {
                alert("被点击了");
                // return false;
                window.event.preventDefault(); //阻止浏览器的默认事件
            }
        </script>
    </body>
</html>

div的滚动条

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            div{
                width: 200px;
                height: 500px;
                overflow: auto;
                
            }
        </style>
    </head>
    <body>
        <div>
            啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了啦啦啦啦安安静静加加加安监局明晚妈妈妈妈妈妈   拉了我来了了,...
        </div>
    </body>
</html>

案例:自定义滚动条

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

            .box {
                width: 300px;
                height: 500px;
                border: 1px solid red;
                margin: 100px;
                position: relative;
                overflow: hidden;
            }

            .content {
                padding: 5px 18px 5px 5px;
                position: absolute;
                top: 0;
                left: 0;

            }

            .scroll {
                width: 18px;
                height: 100%;
                position: absolute;
                top: 0;
                right: 0;
                background-color: #eee;
            }

            .bar {
                height: 100px;
                width: 100%;
                position: absolute;
                top: 0;
                left: 0;
                background-color: red;
                border-radius: 10px;
                cursor: pointer;
            }
        </style>

    </head>
    <body>
        <div class="box" id="box">
            <div class="content" id="content">
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头
                床前明月光啊,明月光,疑是地上霜啊,举头嘿嘿

            </div>
            <!--文字内容-->
            <div id="scroll" class="scroll">
                <!--装滚动条的层-->
                <div class="bar" id="bar"></div>
                <!--滚动条-->
            </div>
        </div>
        <script src="js/common.js"></script>
        <script type="text/javascript">
            // 最外面的div
            var box = my$('box');
            // 文字div
            var content = my$('content');
            // 装滚动条的div ----容器
            var scroll = my$('scroll');
            //滚动条
            var bar = my$('bar');

            // 设置滚动条的高度
            // 滚动条的高/装滚动条的div的高=box的高/文字div的高;
            // 滚动条的高=装滚动条的div的高*box的高/文字div的高;
            var height = scroll.offsetHeight * box.offsetHeight / content.offsetHeight;
            bar.style.height = height + "px";
            // 移动滚动条
            bar.onmousedown = function(e) {
                var spaceY = e.clientY - bar.offsetTop;
                document.onmousemove = function(e) {
                    //移动事件
                    var y = e.clientY - spaceY;
                    y = y < 0 ? 0 : y;
                    y = y > scroll.offsetHeight - bar.offsetHeight ? scroll.offsetHeight - bar.offsetHeight : y;
                    bar.style.top = y + "px";
                    // 设置鼠标移动的时候,文字不被选中
                    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
                    // 滚动条的移动距离/文字div的移动距离=滚动条最大的移动距离/文字div的最大移动距离
                    // 文字div的移动距离=滚动条的移动距离*文字div的最大移动距离/滚动条最大的移动距离
                    var moveY = y * (content.offsetHeight - box.offsetHeight) / (scroll.offsetHeight - bar.offsetHeight);
                    // 设置文字div的移动距离
                    content.style.marginTop = -moveY + "px";
                }
            }
            document.onmouseup = function() {
                document.onmousemove = null;
            }
        </script>
    </body>
</html>

元素隐藏的不同方式

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            div {
                width: 300px;
                height: 200px;
                border: 1px solid red;
            }
        </style>
    </head>
    <body>
        <input type="button" value="显示效果" id="btn" />
        <div id="dv"></div>哈哈
        <script src="js/common.js"></script>
        <script type="text/javascript">
            my$('btn').onclick = function() {
                // 隐藏div
                // 不占位
                // my$('dv').style.display = "none";
                //占位
                // my$('dv').style.visibility="hidden";
                // 占位
                // my$('dv').style.opacity=0;
                // 占位
                my$('dv').style.height = "0px";
                my$('dv').style.border = "0px solid red";
            };
        </script>
    </body>
</html>

案例:表格隔行变色

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

            .wrap {
                width: 500px;
                margin: 100px auto 0;
            }

            table {
                border-collapse: collapse;
                border-spacing: 0;
                border: 1px solid #c0c0c0;
                width: 500px;
                cursor: pointer;
            }

            th,
            td {
                border: 1px solid #d0d0d0;
                color: #404060;
                padding: 10px;
            }

            th {
                background-color: #09c;
                font: bold 16px "微软雅黑";
                color: #fff;
            }

            td {
                font: 14px "微软雅黑";
            }

            tbody tr {
                background-color: pink;
            }
        </style>

    </head>
    <body>
        <div class="wrap">
            <table>
                <thead>
                    <tr>
                        <th>序号</th>
                        <th>姓名</th>
                        <th>课程</th>
                        <th>成绩</th>
                    </tr>
                </thead>
                <tbody id="j_tb">
                    <tr>
                        <td>
                            1
                        </td>
                        <td>柳岩</td>
                        <td>语文</td>
                        <td>100</td>

                    </tr>
                    <tr>
                        <td>
                            2
                        </td>
                        <td>苍老师</td>
                        <td>日语</td>
                        <td>100</td>
                    </tr>
                    <tr>
                        <td>
                            3
                        </td>
                        <td>凤姐</td>
                        <td>营销学</td>
                        <td>100</td>
                    </tr>
                    <tr>
                        <td>
                            4
                        </td>
                        <td>芙蓉姐姐</td>
                        <td>数学</td>
                        <td>10</td>
                    </tr>
                    <tr>
                        <td>
                            5
                        </td>
                        <td>佐助</td>
                        <td>英语</td>
                        <td>100</td>
                    </tr>
                    <tr>
                        <td>
                            6
                        </td>
                        <td>卡卡西</td>
                        <td>体育</td>
                        <td>100</td>
                    </tr>
                    <tr>
                        <td>
                            7
                        </td>
                        <td>乔峰</td>
                        <td>体育</td>
                        <td>100</td>
                    </tr>
                </tbody>
            </table>
        </div>
        <script src="js/common.js"></script>
        <script type="text/javascript">
            // 先获取所有的行
            var trs = my$('j_tb').getElementsByTagName('tr');
            for (var i = 0; i < trs.length; i++) {
                console.log(i)
                trs[i].style.backgroundColor = i % 2 == 0 ? "red" : "yellow";
                // 鼠标进入
                trs[i].onmouseover = mouseoverHandle;
                // 鼠标离开
                trs[i].onmouseout = mouseoutHandle;

            }
            // 当鼠标进入的时候,先把设置后的颜色保存起来,等到鼠标离开后再回复
            var lastColor = "";

            function mouseoverHandle() {
                lastColor = this.style.backgroundColor;
                this.style.backgroundColor = "green";
            };

            function mouseoutHandle() {
                this.style.backgroundColor = lastColor;
            };
        </script>
    </body>
</html>

案例:tab切换效果

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            #list li {
                list-style-type: none;
                width: 80px;
                height: 30px;
                line-height: 30px;
                background-color: beige;
                text-align: center;
                float: left;
                margin-left: 5px;
            }

            #list li.current {
                background-color: burlywood;
            }

            #list li a {
                text-decoration: none;
            }
        </style>

    </head>
    <body>
        <div id="menu">
            <ul id="list">
                <li class="current"><a href="http://www.baidu.com">首页</a>
                </li>
                <li><a href="javascript:void(0)">播客</a></li>
                <li><a href="javascript:void(0)">博客</a></li>
                <li><a href="javascript:void(0)">相册</a></li>
                <li><a href="javascript:void(0)">关于</a></li>
                <li><a href="javascript:void(0)">帮助</a></li>
            </ul>
        </div>
        <script src="js/common.js"></script>
        <script type="text/javascript">
            // 获取所有li的标签
            var liObjs = my$('list').getElementsByTagName('li');
            
            // 遍历,找到每个li中的a注册点击事件
            for (var i = 0; i < liObjs.length; i++) {
                
                // 每个li中的a
                var aObj = getFirstElement(liObjs[i]);
                
                aObj.onclick = function() {
                    for (var j = 0; j < liObjs.length; j++) {
                        console.log(liObjs[i])
                        // 把这个a所在的li的所有的兄弟元素的类样式全部移除
                        liObjs[j].removeAttribute('class');
                    }
                    // 当前点击的a的父级元素li(点击的这个a所在的父级元素li)),设置背景颜色
                    this.parentNode.className = "current";
                    // 组织超链接跳转
                    return false;
                }
            }
        </script>
    </body>
</html>

案例:大量字符串拼接

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <input type="button" value="拼接吧" id="btn" /><br />
        <input type="text" value="" /><br />
        <input type="text" value="" /><br />
        <input type="text" value="" /><br />
        <input type="text" value="" /><br />
        <input type="text" value="" /><br />
        <script src="js/common.js"></script>
        <script type="text/javascript">
            // 字符串特效:不可比性
            //          document.getElementById('btn').onclick = function() {
            //              var str = "";
            //              var inputs = document.getElementsByTagName('input');
            //              // 每个文本框的属性值
            //              for (var i = 0; i < inputs.length - 1; i++) {
            //                  if (inputs[i].type != "button") {
            //                      str += inputs[i].value + "|";
            //                  }
            //              }
            //              my$('btn').value = str += inputs[inputs.length - 1].value
            //              console.log(str += inputs[inputs.length - 1].value);
            //          };
            // 推荐使用 数组的方式拼接大量字符串
            document.getElementById('btn').onclick = function() {
                var str = [];
                var inputs = document.getElementsByTagName('input');
                for (i = 0; i < inputs.length; i++) {
                    if (inputs[i].type != "button") {
                        str.push(inputs[i].value);
                    }
                }
                console.log(str.join("|"));
            };
        </script>
    </body>
</html>

案例:无刷新评论

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <table id="tb" border="1">
            <tbody id="tbd">
                <tr>
                    <td>猪猪:</td>
                    <td>我喜欢吃肉</td>
                </tr>
            </tbody>
        </table>
        <div>
            昵称:<input type="text" value="" id="userName" /><br />
            <textarea name="" id="tt" cols="30" rows="10"></textarea><br />
            <input type="button" value="评论一下" id="btn" /><br />
        </div>
        <script src="js/common.js"></script>
        <script type="text/javascript">
            my$('btn').onclick = function() {
                // 获取昵称的元素
                var userName = my$('userName');
                // 获取评论的元素
                var tt = my$('tt');
                // 创建行
                var tr = document.createElement('tr');
                // 行加到tbody中
                my$('tbd').appendChild(tr);
                // 创建列
                var td1 = document.createElement('td');
                tr.appendChild(td1);
                td1.innerHTML = userName.value;
                // 创建列
                var td2 = document.createElement('td');
                tr.appendChild(td2);
                td2.innerHTML = tt.value;
                // 清空
                userName.value = "";
                tt.value = "";
            }
        </script>
    </body>
</html>

相关js:

/**
 * 获取父级元素中的第一个子元素
 * @param element 父级元素
 * @returns {*} 父级元素中的子级元素
 */
function getFirstElement(element) {
    if (element.firstElementChild) {
        return element.firstElementChild;
    } else {
        var node = element.firstChild;
        while (node && node.nodeType != 1) {
            node = node.nextSibling;
        }
        return node;
    }
}

案例:放大镜效果

<!DOCTYPE html>
<html>
    <head>
        <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: 0px;
                left: 0px;
                cursor: move;
                display: none;
            }

            .small {
                position: relative;
            }
        </style>

    </head>
    <body>
        <div class="box" id="box">
            <div class="small">
                <!--小层-->
                <img src="images/small.png" width="350" alt="" />
                <div class="mask"></div>
                <!--遮挡层-->
            </div>
            <!--小图-->
            <div class="big">
                <!--大层-->
                <img src="images/big.jpg" width="800" alt="" />
                <!--大图-->
            </div>
            <!--大图-->
        </div>
        <script src="js/common.js"></script>
        <script type="text/javascript">
            var box = my$('box');
            // 获取小图的div
            var small = box.children[0];
            // 遮罩层
            var mask = small.children[1];
            // 获取大图的div
            var big = box.children[1];
            //获取大图
            var bigImg = big.children[0];
            // 鼠标进入显示遮罩层和大图的div
            box.onmouseover = function() {
                mask.style.display = "block";
                big.style.display = "block";
            };
            // 鼠标离开时 隐藏遮罩层和大图的div
            box.onmouseout = function() {
                mask.style.display = "none";
                big.style.display = "none";
            };
            // 鼠标移动事件---鼠标是在小层上移动
            small.onmousemove = function(e) {
                // 鼠标此时的可视区域的横坐标和纵坐标
                // 主要是设置鼠标在遮罩层的中间显示
                var x = e.clientX - mask.offsetWidth / 2;
                var y = e.clientY - mask.offsetHeight / 2;
                //主要是margin的100px的问题
                x = x - 100;
                y = y - 100;
                // 横坐标的最小值
                x = x < 0 ? 0 : x;
                // 纵坐标的最小值
                y = y < 0 ? 0 : y;
                // 横坐标的最大值
                x = x > small.offsetWidth - mask.offsetWidth ? small.offsetWidth - mask.offsetWidth : x;
                // 纵坐标的最大值
                y = y > small.offsetHeight - mask.offsetHeight ? small.offsetHeight - mask.offsetHeight : y;
                // 为遮罩层的left和top赋值
                mask.style.left = x + "px";
                mask.style.top = y + "px";
                //遮罩层的移动距离/大图的移动距离=遮罩层的最大移动距离/大图的最大移动距离
                // 大图的移动距离=遮罩层的移动距离*大图的最大移动距离/遮罩层的最大移动距离
                // 大图的横向最大移动距离
                var maxX = bigImg.offsetWidth - big.offsetWidth;
                // 大图的纵坐标的最大的移动距离
                var maxY = bigImg.offsetHeight - big.offsetHeight;
                // 大图的横向移动的坐标
                var bigImgMoveX = x * maxX / (small.offsetWidth - mask.offsetWidth);
                var bigImgMoveY = y * maxX / (small.offsetWidth - mask.offsetWidth);

                // 设置图片移动
                bigImg.style.marginLeft = -bigImgMoveX + "px";
                bigImg.style.marginTop = -bigImgMoveY + "px";

            };
        </script>
    </body>
</html>

demo地址

相关文章

网友评论

    本文标题:JS基础学习:图片跟着鼠标飞(最终)/案例复习/拖拽对话框/滚动

    本文链接:https://www.haomeiwen.com/subject/mgmpwqtx.html