vue實現移動端觸屏拖拽功能


 

vue實現移動端觸屏拖拽功能

轉載:https://www.jb51.net/article/193832.htm

<template>
    <div class="floatball" id="floatball" @mousedown="down" @touchstart.stop="down" @mousemove="move"
        @touchmove.stop="move" @mouseup="end" @touchend.stop="end" :style="{top:position.y+'px', left:position.x+'px'}">
        獎勵規則
    </div>
</template>

<script>
    // 鼠標位置和div的左上角位置 差值
    var dx, dy
    var screenWidth = window.screen.width
    var screenHeight = window.screen.height

    export default {
        data() {
            return {
                flags: false,
                position: {
                    x: 320,
                    y: 60
                },
            }
        },


        methods: {
            // 實現移動端拖拽
            down(event) {
                this.flags = true;
                var touch;
                if (event.touches) {
                    touch = event.touches[0];
                } else {
                    touch = event;
                }
                console.log('鼠標點所在位置', touch.clientX, touch.clientY)
                console.log('div左上角位置', event.target.offsetTop, event.target.offsetLeft)
                dx = touch.clientX - event.target.offsetLeft
                dy = touch.clientY - event.target.offsetTop
            },
            move() {
                if (this.flags) {
                    var touch;
                    if (event.touches) {
                        touch = event.touches[0];
                    } else {
                        touch = event;
                    }
                    // 定位滑塊的位置
                    this.position.x = touch.clientX - dx;
                    this.position.y = touch.clientY - dy;
                    // 限制滑塊超出頁面
                    // console.log('屏幕大小', screenWidth, screenHeight )
                    if (this.position.x < 0) {
                        this.position.x = 0
                    } else if (this.position.x > screenWidth - touch.target.clientWidth) {
                        this.position.x = screenWidth - touch.target.clientWidth
                    }
                    if (this.position.y < 0) {
                        this.position.y = 0
                    } else if (this.position.y > screenHeight - touch.target.clientHeight) {
                        this.position.y = screenHeight - touch.target.clientHeight
                    }
                    //阻止頁面的滑動默認事件
                    document.addEventListener("touchmove", function () {
                        event.preventDefault();
                    }, false);
                }
            },
            //鼠標釋放時候的函數
            end() {
                console.log('end')
                this.flags = false;
            },

        }

    }
</script>

<style>
    .floatball {
        color: white;
        height: 50px;
        width: 50px;
        padding: 5px;
        z-index: 990;
        position: fixed;
        top: 60px;
        right: 320px;
        border-radius: 50%;
        background-color: rgba(29, 157, 237, 0.8);
    }
</style>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM