ホームページ  >  記事  >  ウェブフロントエンド  >  jsを使ってスタイリッシュなドラッグ&ドロップ機能を実装する

jsを使ってスタイリッシュなドラッグ&ドロップ機能を実装する

韦小宝
韦小宝オリジナル
2018-03-09 15:57:351265ブラウズ

一部の Web サイトでは、非常にファッショナブルでクールな画像のドラッグ アンド ドロップが見られます。もちろん、これらの操作は JavaScript を使用して実現できます。そこで、今日は JavaScript を使用してドラッグ アンド ドロップ機能を実装する方法について説明します。わかりません。JavaScript を使用してドラッグ アンド ドロップ機能を実装することに興味がある場合は、見てみましょう。

注目すべき質問:

1. Web ページにドラッグ機能を実装する方法。

2. document.documentElement と document.body の違い。 document.documentElement.clientWidth は、HTML ドキュメント全体の幅、つまり document.body.clientWidth の幅を指します。この 2 つは同じではありません。コンソールの console.log(document.documentElement) および console.log(document.body) を通じてテストできます。

3. getBoundingClientRect().left と offsetLeft の違い。 (1) getBoundingClientRect() は、要素の左、上、右、下を取得するために使用されます。

(2)offset は親を基準にして左と上を取得します。 getBoundingClientRect() は、ウィンドウを基準にして左、上、右、下を取得します。

4. e.clientX は、ウィンドウに対するマウス ポイントの座標を参照します。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>弹窗</title>
    <style type="text/css">
        #mask {
            position: fixed;
            left:0;
            top:0;
            width:100%;
            height: 100%;
            background-color: hsla(250,100%,50%,0.6);
            display: none;
        }
        #popBox {
            position: absolute;
            background-color: #fff;
            width:200px;
            height: 200px;
            /*left:50%;
            top:50%;*/
            /*margin-top: -100px;
            margin-left: -100px;*/
        }
    </style>
</head>
<body>
    <button id="clickBtn">点击</button>
    <p id="mask">
        <p id="popBox"></p>
    </p>
    <script type="text/javascript">
        var clickBtn = document.getElementById("clickBtn");
        var popBox = document.getElementById("popBox")
        var mask = document.getElementById("mask");
        clickBtn.onclick = function() {
            mask.style.display = "block";
            popBox.style.left = (document.documentElement.clientWidth - popBox.offsetWidth)/2 + "px";
            popBox.style.top = (document.documentElement.clientHeight - popBox.offsetHeight)/2 + "px";

        }
        popBox.onclick = function(e) {
            var e = e || window.event;//e指所有代码的集合,通过它可以获取事件的各种属性。
            e.cancelBubble = true;//阻止事件冒泡,即点击事件不会传递到mask这一层,意味着不会触发点击mask事件代码。
        }
        mask.onclick = function() {
            mask.style.display = "none";
        }

        //拖拽 mousedown->mousemove->mouseup 
        popBox.onmousedown = function(e) {
            var e = e || window.event;
            var pos = popBox.getBoundingClientRect();//getBoundingClientRect()用于获取元素的left、top、right、bottom。offset获取相对于父级的left和top。getBoundingClientRect()获取相对于窗口的left、top、right、bottom。
            var oX = e.clientX - pos.left;//clientX指相对于窗口的坐标。
            var oY = e.clientY - pos.top;
            document.onmousemove = function(e) {
                var e = e || window.event;
                var oLeft = e.clientX - oX;
                var oTop = e.clientY - oY;
                popBox.style.left = oLeft + "px";
                popBox.style.top = oTop + "px";
                if (oLeft<0) {
                    popBox.style.left = 0 + "px";
                };
                if (oLeft>document.documentElement.clientWidth - popBox.offsetWidth) {
                    popBox.style.left = document.documentElement.clientWidth - popBox.offsetWidth + "px";//document.documentElement.clientWidth指整个html文档的宽度,document.body.clientWidth的宽度。这两者是不一样的。可以在console控制台通过console.log(document.documentElement)和console.log(document.body)进行测试。


                }
                if (oTop<0) {
                    popBox.style.top = 0 + "px";
                };
                if (oTop > document.documentElement.clientHeight - popBox.offsetHeight) {
                    popBox.style.top = document.documentElement.clientHeight - popBox.offsetHeight + "px";
                }

            }
            popBox.onmouseup = function() {
                document.onmousemove = null;
            }
        }
    </script>
</body>
</html>

コード分析と組み合わせると、ソースコードを自分で削除したり修正したりする試みを行ったように感じます。この種の学習は非常に速く進み、忘れにくいです。

関連する推奨事項:

js 制御ファイルのドラッグとドラッグ コンテンツの取得

以上がjsを使ってスタイリッシュなドラッグ&ドロップ機能を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。