html PC端 拖动

该功能计划用于公司对外SDK对接,所有语法基于ES5进行编写,纯JS没有使用其它引用。
click事件会与按下弹起事件冲突所以在弹出事件触发时判断是点击还是拖动。

		var downx, downy;
        //拖动阀值
        var threshold = 10;
        function body_dom_mousemove(e) {
            if (!(downx <= e.clientX + threshold && downx >= e.clientX - threshold) ||
                !(downy <= e.clientY + threshold && downy >= e.clientY - threshold)) {
                //超过移动阀值,判定为用户在拖动悬浮球
                ym_createBall_dom.style.left = e.clientX-20 + "px";
                ym_createBall_dom.style.top = e.clientY-20 + "px";
            }
        }
        //鼠标按下时触发
        ym_createBall_dom.onmousedown = function (e) {
        	//记录原始值
            downx = e.clientX
            downy = e.clientY
            //给最外层的body添加鼠标移动事件
            body_dom.addEventListener('mousemove', body_dom_mousemove)
        }
        //鼠标弹起时触发
        ym_createBall_dom.onmouseup = function (e) {
            body_dom.removeEventListener('mousemove',body_dom_mousemove)
            if ((downx <= e.clientX + threshold && downx >= e.clientX - threshold) ||
                (downy <= e.clientY + threshold && downy >= e.clientY + threshold)) {
                //未超过阀值判定为点击
                if (_ym.IsLoginSuccess() && _ym.GetIsRealName() && !_ym.data.is_iframe_lock) {
                    _ym.iframeSrc(
                        "suspensionBall/suspensionBall?token=" + _ym.data.token
                    );
                }
                onclick();
            }else{
                //获取鼠标按下的坐标
                var x = e.clientX > body_dom.clientWidth / 2 ? body_dom.clientWidth - 32 : 0;
                ym_createBall_dom.style.left = x+ "px";
            }
        }

效果
在这里插入图片描述

手机端拖动代码
手机端简单很多直接用触摸事件就好了

 /*触摸开始*/
        ym_createBall_dom.ontouchmove = function (e) {
            var changedTouches = e.changedTouches[0];
            //获取鼠标按下的坐标
            var x = changedTouches.clientX > 0 ? changedTouches.clientX : 0;
            var y = changedTouches.clientY > 0 ? changedTouches.clientY : 0;
            ym_createBall_dom.style.left = Number(x).toFixed(0) + "px";
            ym_createBall_dom.style.top = Number(y).toFixed(0) + "px";
        };
        /*触摸结束事件*/
        ym_createBall_dom.ontouchend = function (e) {
            var changedTouches = e.changedTouches[0];
            //获取鼠标按下的坐标
            var x =
                changedTouches.clientX > body_dom.clientWidth / 2 ?
                    body_dom.clientWidth - 32 :
                    0;
            ym_createBall_dom.style.left = Number(x).toFixed(0) + "px";
        };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值