Home Web Front-end JS Tutorial javascript mouse events

javascript mouse events

Dec 06, 2016 am 11:28 AM

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>简单拖拽实现</title>

<style type="text/css">

*{margin:0;padding:0;}

#box{ margin:20px auto; position:relative; width:400px; height:400px; background:#ccc; border:1px solid #333; postion:relative; }

#dragBox{ width:50px; height:50px;  text-align:center; line-height: 50px;position: absolute; background:blue; cursor:move; font-size:12px; color:#fff;}

</style>

</head>

<body>

<div id="box">

        <div id="dragBox">拖我</div>

</div>

<script type="text/javascript">

var VVG = {};  //命名空间

VVG.DOM = {

    $: function(id) { //创建方便的选择符

        return typeof id == "string" ? document.getElementById(id) : id;

    },

    bindEvent: function(node, type, func) { //事件绑定方法

        if (node.addEventListener) {

            node.addEventListener(type, func, false);

        } else if (node.attachEvent) {

            node.attachEvent("on" + type, func);

        } else {

            node["on" + type] = func;

        }

    },

    getEvent: function(event) { //获取事件

        return event ? event : window.event;

    },

    getTarget: function(event) { //获取事件目标

        return event.target || event.srcElement;

    }

}

    var DragDrop =  function() { //新建一个返回对象的函数

        var box = VVG.DOM.$("box"); //获取外围BOX

        var dragBox = VVG.DOM.$("dragBox");//获取需要拖动的BOX

        var dragging = null; //初始化对象

        function drag(event) { //事件执行函数

            event = VVG.DOM.getEvent(event);

            var target = VVG.DOM.getTarget(event);

            switch (event.type) {//判断事件类型

            case "mousedown":

                if(target.id == "dragBox"){ //当事件对象的ID等于要拖动的BOX的ID时

                    dragging = target; //赋值到拖动目标

                }

                break;

            case "mousemove":

                if(dragging){ //当有拖动目标时执行

                    sTop = document.documentElement.scrollTop || document.body.scrollTop; //当有滚动条的时候卷去页面的高度

                    dragging.style.left = (event.clientX - box.offsetLeft - dragBox.offsetWidth/2) + "px";

                    dragging.style.top = (event.clientY + sTop - box.offsetTop  - dragBox.offsetHeight/2 ) + "px";

                    var left = parseInt(dragging.style.left);

                    var top = parseInt(dragging.style.top);

                    //console.log("left:"+left+"-----top:"+top + "-------sTop:"+sTop);

                    // 比较坐标是否超出外围的BOX

                    if(left < 0){

                        dragging.style.left = 0 +"px";

                    }

                    if(top < 0){

                        dragging.style.top = 0+"px";

                    }

                    if(left > box.offsetWidth - dragBox.offsetWidth){

                        dragging.style.left = (box.offsetWidth - dragBox.offsetWidth - 2 )+"px";

                    }

                    if(top >  box.offsetHeight - dragBox.offsetHeight){

                        dragging.style.top =( box.offsetHeight - dragBox.offsetHeight  - 2 )+"px";

                    }

                }

                break;

            case "mouseup":

                // 清空拖动目标

                dragging = null;

                break;

            }

        };

        return {

            dragStart: function() {

                // 绑定事件

                VVG.DOM.bindEvent(document, "mousedown", drag);

                VVG.DOM.bindEvent(document, "mousemove", drag);

                VVG.DOM.bindEvent(document, "mouseup", drag);

            }

        }

    }();

    DragDrop.dragStart();

</script>

</body>

</html>

Copy after login

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Replace String Characters in JavaScript Replace String Characters in JavaScript Mar 11, 2025 am 12:07 AM

Replace String Characters in JavaScript

jQuery Check if Date is Valid jQuery Check if Date is Valid Mar 01, 2025 am 08:51 AM

jQuery Check if Date is Valid

jQuery get element padding/margin jQuery get element padding/margin Mar 01, 2025 am 08:53 AM

jQuery get element padding/margin

10 jQuery Accordions Tabs 10 jQuery Accordions Tabs Mar 01, 2025 am 01:34 AM

10 jQuery Accordions Tabs

10 Worth Checking Out jQuery Plugins 10 Worth Checking Out jQuery Plugins Mar 01, 2025 am 01:29 AM

10 Worth Checking Out jQuery Plugins

HTTP Debugging with Node and http-console HTTP Debugging with Node and http-console Mar 01, 2025 am 01:37 AM

HTTP Debugging with Node and http-console

jquery add scrollbar to div jquery add scrollbar to div Mar 01, 2025 am 01:30 AM

jquery add scrollbar to div

Custom Google Search API Setup Tutorial Custom Google Search API Setup Tutorial Mar 04, 2025 am 01:06 AM

Custom Google Search API Setup Tutorial

See all articles