继承案例_限制范围的拖拽

Drag.js

function Drag(id) {
    var _this = this;
    this.disX = 0;
    this.disY = 0;
    this.oDiv = document.getElementById(id);
    this.oDiv.onmousedown = function (ev) {
        _this.fnDown(ev);
    };
}

Drag.prototype.fnDown = function(ev) {
    var _this = this;
    var oEvent = ev||event;
    //鼠标距离减去物体位置
    this.disX = oEvent.clientX-this.oDiv.offsetLeft;
    this.disY = oEvent.clientY-this.oDiv.offsetTop;
    document.onmousemove = function (ev) {
        _this.fnMove(ev);
    };
    document.onmouseup = function () {
        _this.fnUp();
    };
};
Drag.prototype.fnMove = function(ev) {//限制范围添加到这里
    var oEvent = ev||event;
    this.oDiv.style.left = oEvent.clientX-this.disX+'px';
    this.oDiv.style.top = oEvent.clientY-this.disY+'px';
};
Drag.prototype.fnUp =function() {
    document.onmousemove = null;
    document.onmouseup = null;
}

LimitDrag.js

function LimitDrag(id) {
    //用构造函数伪装,继承属性
    Drag.call(this,id);
}
//用原型链继承方法
for(var i in Drag.prototype){
    LimitDrag.prototype[i] = Drag.prototype[i];
}
LimitDrag.prototype.fnMove = function (ev) {//覆盖Drag.js里的方法。
    var oEvent = ev||event;
    var l = oEvent.clientX-this.disX;
    var t = oEvent.clientY-this.disY;
    if(l<0){
        l=0;
    }else if(l>document.documentElement.clientWidth-this.oDiv.offsetWidth){
        l=document.documentElement.clientWidth-this.oDiv.offsetWidth;
    }
    if(t<0){
        t=0;
    }else if(t>document.documentElement.clientHeight-this.oDiv.offsetHeight){
        t=document.documentElement.clientHeight-this.oDiv.offsetHeight;
    }
    this.oDiv.style.left =l +'px';
    this.oDiv.style.top = t+'px';
}

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        #div1{width:100px;height:100px;background-color:green;position:absolute;left:0;top:0;}
        #div2{width:100px;height:100px;background-color:red;position:absolute;right:0;top:0;}
    </style>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
</body>
</html>
<script type="text/javascript" src="Drag.js"></script>
<script type="text/javascript" src="LimitDrag.js"></script>
<script type="text/javascript">
    window.onload = function () {
        new Drag("div1");
        new LimitDrag("div2");
    }
</script>

 

转载于:https://www.cnblogs.com/wang715100018066/p/6051945.html

在Unity中,我们可以使用以下步骤来实现鼠标拖拽物体移动,并限制拖动范围: 1.创建一个空物体作为拖拽物体的父级,将需要拖拽的物体作为子级添加到其中。 2.在父级上添加一个Box Collider组件,将其设置为Is Trigger。 3.添加一个脚本来控制拖拽行为。在脚本中声明一个变量来存储拖拽物体的初始位置,一个变量来存储鼠标按下时的屏幕坐标,以及一个变量来存储拖拽物体的限制范围。 4.在Update()函数中检测鼠标是否按下。如果按下,记录下鼠标按下时的屏幕坐标,并将拖拽物体的初始位置设置为当前位置。 5.如果鼠标一直按下,计算鼠标移动的距离,并将拖拽物体的位置设置为初始位置加上鼠标移动的距离。同时,检测拖拽物体是否超出了限制范围,如果超出了,将其位置设置为限制范围内的最近位置。 6.最后,将脚本添加到父级物体上,运行游戏即可实现鼠标拖拽物体移动,并限制拖动范围。 下面是示例代码: ``` using UnityEngine; public class DragObject : MonoBehaviour { private Vector3 initialPosition; private Vector3 mousePosition; private Vector3 limitMin; private Vector3 limitMax; private void Start() { // 设置拖拽物体的限制范围 limitMin = gameObject.GetComponent<BoxCollider>().bounds.min; limitMax = gameObject.GetComponent<BoxCollider>().bounds.max; } private void OnMouseDown() { // 记录鼠标按下时的屏幕坐标和拖拽物体的初始位置 mousePosition = Input.mousePosition; initialPosition = transform.position; } private void OnMouseDrag() { // 计算鼠标移动的距离,并设置拖拽物体的位置 Vector3 offset = Input.mousePosition - mousePosition; Vector3 newPosition = initialPosition + offset; // 检测拖拽物体是否超出限制范围,如果超出了,将其位置设置为限制范围内的最近位置 newPosition.x = Mathf.Clamp(newPosition.x, limitMin.x, limitMax.x); newPosition.y = Mathf.Clamp(newPosition.y, limitMin.y, limitMax.y); newPosition.z = Mathf.Clamp(newPosition.z, limitMin.z, limitMax.z); transform.position = newPosition; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值