首頁 > web前端 > js教程 > 主體

利用js實現時尚的拖曳功能

韦小宝
發布: 2018-03-09 15:57:35
原創
1243 人瀏覽過

我們在一些網站中都可以看到很時尚酷炫的圖片拖拽,當然這些操作用JavaScript就就可以實現,那麼我們今天就來講一下如何使用JavaScript實現拖曳功能的,沒有了解JavaScript實現拖曳功能的或有興趣的我們一起來看看吧!

需要看的問題:

#1、如何實作拖曳功能。

2、document.documentElement與document.body的差別。 
document.documentElement.clientWidth指整個html文件的寬度,document.body.clientWidth的寬度。這兩者是不一樣的。可以在console控制台透過console.log(document.documentElement)和console.log(document.body)進行測試。

3、getBoundingClientRect().left與offsetLeft的差別。 
(1)getBoundingClientRect()用來取得元素的left、top、right、bottom。

(2)offset取得相對於父級的left和top。 getBoundingClientRect()取得相對於視窗的left、top、right、bottom。

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!