zoukankan      html  css  js  c++  java
  • 移动端拖拽

    移动端拖拽-Document

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
            <meta name="keywords" content="">
            <meta name="description" content="">
            <meta name="format-detection" content="telephone=no" />
            <title>移动端拖拽-Document</title>
            <style type="text/css">
                body {
                    position: relative;
                    width: 100vw;
                    height: 100vh;
                    margin: 0;
                    padding: 0;
                    background-color: #1cee89;
                }
    
                div {
                    position: absolute;
                    left: 40px;
                    top: 40px;
                    width: 100px;
                    height: 100px;
                    background-color: #8294ff;
                    border-radius: 20px;
                    cursor: move;
                    user-select: none;
                }
            </style>
        </head>
        <body>
            <div></div>
            <script type="text/javascript" charset="utf-8">
                const body = document.querySelector('body');
                const div = document.querySelector('div');
    
                // 获得盒子最大移动位置
                const maxLeft = body.offsetWidth - div.offsetWidth;
                const maxTop = body.offsetHeight - div.offsetHeight;
    
                // 获取手指初始坐标 
                var startX = 0;
                var startY = 0;
    
                // 获得盒子原来的位置 
                var x = 0;
                var y = 0;
    
                // 手指触摸 
                div.addEventListener('touchstart', function(e) {
                    // 获取手指初始坐标 
                    startX = e.targetTouches[0].pageX;
                    startY = e.targetTouches[0].pageY;
                    x = this.offsetLeft;
                    y = this.offsetTop;
                    this.style.boxShadow = '0 0 15px rgba(0, 0, 0, .6)';
                });
    
                // 手指离开 
                div.addEventListener('touchend', function(e) {
                    this.style.boxShadow = '';
                });
    
                // 手指按住移动 
                div.addEventListener('touchmove', function(e) {
                    // 计算手指的移动距离:手指移动之后的坐标减去手指初始的坐标 
                    let moveX = e.targetTouches[0].pageX - startX;
                    let moveY = e.targetTouches[0].pageY - startY;
    
                    let lastLeft = x + moveX;
                    let lastTop = y + moveY;
    
                    //防止超出父元素范围
                    if (lastLeft < 0) lastLeft = 0;
                    if (lastTop < 0) lastTop = 0;
                    if (lastLeft > maxLeft) lastLeft = maxLeft;
                    if (lastTop > maxTop) lastTop = maxTop;
    
                    // 移动盒子 盒子原来的位置 + 手指移动的距离 
                    this.style.left = lastLeft + 'px';
                    this.style.top = lastTop + 'px';
                    
                    // 控制台 打印位置
                    console.log(lastLeft + 'px');
                    console.log(lastTop + 'px');
    
                    // 阻止屏幕滚动的默认行为 
                    e.preventDefault();
                });
            </script>
        </body>
    </html>
    一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
  • 相关阅读:
    分布式数据库中间件Mycat百亿级数据存储(转)
    大文本字符串滤重的解决方案(转)
    java处理大文本2G以上
    Mysql binlog详解
    varnish squid nginx比较
    java运行时内存分类
    redis rdb aof比较
    LeetCode 94 ——二叉树的中序遍历
    线性代数之——向量空间
    线性代数之——A 的 LU 分解
  • 原文地址:https://www.cnblogs.com/antao/p/14034003.html
Copyright © 2011-2022 走看看