900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > js 悬浮按钮 支持PC和移动端拖动

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

时间:2019-11-27 10:20:57

相关推荐

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 = truevar disX, disY, left, top, starX, starYdrag.addEventListener(startEvt, function(e) {// 阻止页面的滚动,缩放e.preventDefault()// 兼容IE浏览器var e = e || window.eventisClick = true// 手指按下时的坐标starX = e.touches ? e.touches[0].clientX : e.clientXstarY = e.touches ? e.touches[0].clientY : e.clientY// 手指相对于拖动元素左上角的位置disX = starX - drag.offsetLeftdisY = 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) - disXtop = (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}}}

最终实现效果如下

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。