js 悬浮按钮,支持PC和移动端拖动

Cesium 安卓版的App 打包成功了,下面需要实现一个类似苹果home 的功能。要求很简单,需要在Web和移动端支持home键的移动。js实现逻辑如下

function move_home(dragId, dragLink) {
            var startEvt, moveEvt, endEvt
                // 判断是否支持触摸事件
            if ('ontouchstart' in window) {
                startEvt = 'touchstart'
                moveEvt = 'touchmove'
                endEvt = 'touchend'
            } else {
                startEvt = 'mousedown'
                moveEvt = 'mousemove'
                endEvt = 'mouseup'
            }
            // 获取元素
            var drag = document.getElementById(dragId)
            drag.style.position = 'absolute'
            drag.style.cursor = 'move'
                // 标记是拖曳还是点击
            var isClick = true
            var disX, disY, left, top, starX, starY

            drag.addEventListener(startEvt, function(e) {
                // 阻止页面的滚动,缩放
                e.preventDefault()
                    // 兼容IE浏览器
                var e = e || window.event
                isClick = true
                    // 手指按下时的坐标
                starX = e.touches ? e.touches[0].clientX : e.clientX
                starY = e.touches ? e.touches[0].clientY : e.clientY
                    // 手指相对于拖动元素左上角的位置
                disX = starX - drag.offsetLeft
                disY = starY - drag.offsetTop
                    // 按下之后才监听后续事件
                document.addEventListener(moveEvt, moveFun)
                document.addEventListener(endEvt, endFun)
            })

            function moveFun(e) {
                // 兼容IE浏览器
                var e = e || window.event
                    // 防止触摸不灵敏,拖动距离大于20像素就认为不是点击,小于20就认为是点击跳转
                if (
                    Math.abs(starX - (e.touches ? e.touches[0].clientX : e.clientX)) > 20 ||
                    Math.abs(starY - (e.touches ? e.touches[0].clientY : e.clientY)) > 20
                ) {
                    isClick = false
                }
                left = (e.touches ? e.touches[0].clientX : e.clientX) - disX
                top = (e.touches ? e.touches[0].clientY : e.clientY) - disY
                    // 限制拖拽的X范围,不能拖出屏幕
                if (left < 0) {
                    left = 0
                } else if (left > document.documentElement.clientWidth - drag.offsetWidth) {
                    left = document.documentElement.clientWidth - drag.offsetWidth
                }
                // 限制拖拽的Y范围,不能拖出屏幕
                if (top < 0) {
                    top = 0
                } else if (top > document.documentElement.clientHeight - drag.offsetHeight) {
                    top = document.documentElement.clientHeight - drag.offsetHeight
                }
                drag.style.left = left + 'px'
                drag.style.top = top + 'px'
            }

            function endFun(e) {
                document.removeEventListener(moveEvt, moveFun)
                document.removeEventListener(endEvt, endFun)
                if (isClick) { // 点击
                    // window.location.href = dragLink
                }
            }
        }

最终实现效果如下

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是一个简单的实现可拖动悬浮按钮的代码示例,使用 JavaScript 和 HTML5 的 drag-and-drop API: HTML 代码: ```html <div id="floating-button" draggable="true"> <span>按钮</span> </div> ``` CSS 代码: ```css #floating-button { position: fixed; bottom: 20px; right: 20px; width: 100px; height: 50px; background-color: #4CAF50; color: white; border-radius: 10px; text-align: center; line-height: 50px; cursor: pointer; } ``` JavaScript 代码: ```javascript const floatingButton = document.getElementById('floating-button'); // 当用户开始拖动悬浮按钮时 floatingButton.addEventListener('dragstart', function (event) { // 记录起始坐标 event.dataTransfer.setData('startX', event.clientX); event.dataTransfer.setData('startY', event.clientY); }); // 当用户正在拖动悬浮按钮时 floatingButton.addEventListener('drag', function (event) { // 计算偏移量 const startX = event.dataTransfer.getData('startX'); const startY = event.dataTransfer.getData('startY'); const offsetX = event.clientX - startX; const offsetY = event.clientY - startY; // 移动悬浮按钮 const initialX = parseInt(window.getComputedStyle(floatingButton).getPropertyValue('right')); const initialY = parseInt(window.getComputedStyle(floatingButton).getPropertyValue('bottom')); floatingButton.style.right = `${initialX - offsetX}px`; floatingButton.style.bottom = `${initialY - offsetY}px`; }); ``` 这段代码创建了一个可拖动悬浮按钮,并且允许用户通过鼠标拖动按钮移动它。当用户开始拖动按钮时,我们记录起始坐标,然后当用户正在拖动按钮时,我们计算当前位置和起始位置之间的偏移量,并将悬浮按钮相应地移动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老朱自强不息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值