亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Vue實現仿iPhone懸浮球的示例代碼

瀏覽:83日期:2023-01-31 13:18:10

懸浮球插件簡單的效果圖:

很遺憾,沒找到太好的視頻轉gif的軟件,壓縮出來的大小超過了限制,就不放圖了

可以參考其他人的圖,效果一致:

Vue實現仿iPhone懸浮球的示例代碼

簡單實用案例:

<!-- 給定一個初始位置position,插槽中填寫想滑動的部分 --><xuanfuqiu :position='position'><d-add-button @click='addPigFarm' add-item='豬場'></d-add-button></xuanfuqiu>

原理示意圖

請結合代碼注釋來理解

Vue實現仿iPhone懸浮球的示例代碼

懸浮球插件代碼如下:

<template> <div> <div : @mousedown='down' @touchstart='down' @mousemove='move' @touchmove='move' @mouseup='end' @touchend='end'> <slot></slot> </div> </div></template><script>export default { name: '', components: {}, props: { // 通過position來設置初始定位 position: { type: Object, default: function() {return { top: '32.25rem', left: '18.34375rem'} } }, // 通過fixed來禁用自由移動 fixed: { type: Boolean, default: false } }, data() { return { flags: false, positionTemp: { x: 0, y: 0 }, // 記錄手指點擊的位置 nx: ’’, ny: ’’, dx: ’’, dy: ’’, xPum: ’’, yPum: ’’, } }, watch: {}, computed: {}, methods: { // 實現移動端拖拽 down(){ if (this.fixed) {return } this.flags = true; var touch; // 該if判斷是用touch還是mouse來移動 if (event.touches) {touch = event.touches[0]; } else {touch = event; } this.positionTemp.x = touch.clientX; // 手指點擊后的位置 this.positionTemp.y = touch.clientY; this.dx = moveDiv.offsetLeft; // 移動的div元素的位置 this.dy = moveDiv.offsetTop; // console.log('moveDiv.offsetLeft', moveDiv.offsetLeft) // console.log('touch.clientX', touch.clientX) }, move(){ if(this.flags) {var touch ;if(event.touches){ touch = event.touches[0];}else { touch = event;}this.nx = touch.clientX - this.positionTemp.x; // 手指移動的變化量this.ny = touch.clientY - this.positionTemp.y;this.xPum = this.dx + this.nx; // 移動后,div元素的位置this.yPum = this.dy + this.ny;let windowWidth = document.documentElement.clientWidthlet windowHeight = document.documentElement.clientHeight// console.log('window.clientWidth', windowWidth)// console.log(this.xPum)// console.log(' moveDiv.clientWidth', moveDiv.clientWidth)if (this.xPum > 0 && (this.xPum + moveDiv.clientWidth < windowWidth)) {// movediv的左右邊,未出界 moveDiv.style.left = this.xPum + 'px';} else if (this.xPum <= 0) { // 左邊出界,則左邊緣貼邊 moveDiv.style.left = 0 + 'px';} else if (this.xPum + moveDiv.clientWidth >= windowWidth) { // 右邊緣出界 moveDiv.style.left = (windowWidth - moveDiv.clientWidth) + 'px'; // console.log('dx', windowWidth - moveDiv.clientWidth)}// 上下未出界if (this.yPum > 0 && (this.yPum + moveDiv.clientHeight < windowHeight)) { moveDiv.style.top = this.yPum +'px';} else if (this.yPum <= 0) { // 上邊緣出界 moveDiv.style.top = 0 + 'px'} else if (this.yPum + moveDiv.clientHeight >= windowHeight) { // 下邊緣 // console.log('windowHeight:', windowHeight) // console.log('moveDiv.clientHeight:', moveDiv.clientHeight) // console.log(this.yPum + moveDiv.clientHeight) moveDiv.style.top = windowHeight - moveDiv.clientHeight + 'px'}// 阻止頁面的滑動默認事件,為了只讓懸浮球滑動,其他部分不滑動;如果碰到滑動問題,1.2 請注意是否獲取到 touchmove, 系統默認passive: true,無法使用preventDefault// document.addEventListener('touchmove', function(){// event.preventDefault();// }, { passive: false });// document.addEventListener('mousemove', function(){// event.preventDefault();// }, { passive: false });document.addEventListener('touchmove', this.preventDefault, { passive: false })document.addEventListener('mousemove', this.preventDefault, { passive: false }) } }, //鼠標釋放時候的函數,鼠標釋放,移除之前添加的偵聽事件,將passive設置為true,不然背景會滑動不了 end(){ this.flags = false // 注意事項,在添加和刪除監聽事件時,其function必須是同名的函數,不能為匿名函數。 document.removeEventListener(’touchmove’,this.preventDefault, false) document.removeEventListener(’mousemove’,this.preventDefault, false) // 下面兩句是保證在移除監聽事件后,除了懸浮球的部分還能夠滑動,如果不添加,則無法滑動 document.addEventListener('touchmove', function(e) {window.event.returnValue = true }) document.addEventListener('mousemove', function(e) {window.event.returnValue = true }) }, preventDefault(e) { e.preventDefault() } }, created() {}, mounted() {}}</script><style lang='scss' scoped>.xuanfu { /* 如果碰到滑動問題,1.3 請檢查 z-index。z-index需比web大一級*/ z-index: 999; position: fixed; // 這里的定位方式有待考量,fixed的話存在未知設置不合理,跑出屏幕不顯示的問題}</style>

到此這篇關于Vue實現仿iPhone懸浮球的示例代碼的文章就介紹到這了,更多相關Vue 懸浮球內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 久久精品视频1 | 任我爽在线 | 亚洲三级色 | 99人中文字幕亚洲区 | 国产97色在线 | 免费 | 免费观看黄a一级视频 | 国产三级一区二区三区 | 国内精品久久久久久久久 | 欧美三级不卡视频 | 日韩高清一区 | 九九久久免费视频 | 久久久久精彩视频 | 国产视频三区 | 国产精品高清一区二区不卡 | 亚洲视频天天射 | 俄罗斯一级毛片免费播放 | 亚洲视频在线免费播放 | 娇喘呻吟福利视频在线观看 | 香港激情三级做爰小说 | 国产成人精品福利网站人 | 国产成人拍精品视频网 | 日本xxx高清免费视频 | 国产成人盗拍精品免费视频 | 国产综合欧美日韩视频一区 | 国内视频一区 | 999精品在线视频 | 国产日本三级 | 免费日韩精品 | 欧美激情二区三区 | 无圣光福利视频 | 亚洲天堂色视频 | 久久无码精品一区二区三区 | 国产精品亚洲成在人线 | 在线观看成年人视频 | 欧美一级高清免费a | 国产一区二区三区在线看 | 亚洲国产精品自在现线让你爽 | 国产成人禁片免费观看视频 | 国产精品不卡片视频免费观看 | 国产高清在线a视频大全 | 美女国产一区 |