javascript - 一个实现拖拽效果的js小demo报错的问题
迷茫
迷茫 2017-04-11 11:33:26
[JavaScript讨论组]

跟着网上的这篇教程做的一个拖拽效果,教程传送门
但是在chrome里运行时总是报错:

先贴上代码:

myDragDemo.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MyDragDemo</title>
    <style type="text/css">
        #box{
            position : absolute;
            left : 100px;
            top : 100px;
            padding : 5px;
            background : lightblue;
            font-size : 15px;
            -moz-box-shadow : 2px 2px 4px grey;
            -webkit-box-shadow : 2px 2px 4px grey;
        }
        #main{
            border : 2px solid green;
            background: yellowgreen;
        }
        #bar{
            line-height : 30px;
            background : purple;
            border-bottom : 2px solid pink;
            padding-left : 5px;
            cursor : move;
        }
        #content{
            width: 400px;
            height: 150px;
            padding: 10px 5px;
        }
    </style>

    <script type="text/javascript" src = './myMovePlugin.js'></script>
    <script type="text/javascript">
        var obar = document.getElementById('bar');
        var oTarget = document.getElementById('box');
        myDrag(obar,oTarget);
    </script>
</head>
<body>
    <p id="box">
        <p id="main">
            <p id="bar">Drag</p>
            <p id="content">Content</p>
        </p>
    </p>
</body>
</html>

myMovePlugin.js:

var params = {
    left: 0,
    top: 0,
    currentX: 0,
    currentY: 0,
    flag: false
};

var getCss = function(o, key) {
    return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,false)[key];
};

var myDrag = function(bar, target) {
    params.left = getCss(bar,'left');
    params.top = getCss(bar,'top');

    bar.onmousedown = function (e) {
        params.flag = true;
        if (!e) {
            e = window.event;
        }
        //防止IE文字被选中
        bar.onselectstart = function () {
            return false 
        }

        var e = event;
        params.currentX = e.ClientX;
        params.currentY = e.ClientY;
    };

    bar.onmouseup = function (e) {
        params.flag = false;
        params.left = getCss(bar,'left');
        params.top = getCss(bar,'top'); 
    };

    bar.onmousemove = function (e) {
        var e = event? event : window.event;
        if (params.flag) {
            var nowX = e.ClientX, nowY = e.ClientY;
            var disX = nowX - params.currentX, disY = nowY - params.currentY;
            target.style.left = parseInt(params.left) + disX + 'px';
            target.style.top = parseInt(params.top) + disY + 'px';
        }
    }

}

我对比了下,代码应该和教程里面的一样,没有什么问题呀,为什么教程里的可以正常执行,我的就会报错呢?谁能帮我看看么?感谢哦= ̄ω ̄=

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
大家讲道理

html稍作调整:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MyDragDemo</title>
    <style type="text/css">
        #box{
            position : absolute;
            left : 100px;
            top : 100px;
            padding : 5px;
            background : lightblue;
            font-size : 15px;
            -moz-box-shadow : 2px 2px 4px grey;
            -webkit-box-shadow : 2px 2px 4px grey;
        }
        #main{
            border : 2px solid green;
            background: yellowgreen;
        }
        #bar{
            line-height : 30px;
            background : purple;
            border-bottom : 2px solid pink;
            padding-left : 5px;
            cursor : move;
        }
        #content{
            width: 400px;
            height: 150px;
            padding: 10px 5px;
        }
    </style>
</head>
<body>
    <p id="box">
        <p id="main">
            <p id="bar">Drag</p>
            <p id="content">Content</p>
        </p>
    </p>
    
    <script type="text/javascript" src = './myMovePlugin.js'></script>
    <script type="text/javascript">
        var obar = document.getElementById('bar');
        var oTarget = document.getElementById('box');
        myDrag(obar,oTarget);
    </script>
</body>
</html>
高洛峰

浏览器解析html代码至dom时是从上至下的解析,执行该js时未查询到该dom,该问题是查询dom为null。
问题非常基础,又是一个伪码农;
不建议楼上的回答方式,导致整个segmentfault提问水平太捉急;

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号