美文网首页
移动端图标拖拽,移动

移动端图标拖拽,移动

作者: wei_421 | 来源:发表于2019-06-11 18:06 被阅读0次

    代码:

    <html>

    <header>

        <title>

            drag

        </title>

        <style>

            #drag {

                width: 500px;

                height: 100px;

                background: cornflowerblue;

                border-radius: 50px;

                box-shadow: lightsteelblue 5px 5px 5px;

                position: relative;

                left: 100px;

                top: 100px;

            }

        </style>

    </header>

    <body>

    <div id="drag">

    </div>

    <script>

        var dragEl = document.querySelector('#drag');

        var HEIGHT, WIDTH, TIMEOUT;

        dragEl.addEventListener('touchstart', function (e) {

            var touches = e.touches[0];

            HEIGHT = touches.clientY - this.offsetTop;

            WIDTH = touches.clientX - this.offsetLeft;

            document.body.addEventListener('touchmove', function (e) {

                e.preventDefault()

            }, false)

        }, false);

        dragEl.addEventListener("touchmove", function (e) {

            var touches = e.touches[0];

            var LEFT = touches.clientX - WIDTH;

            var TOP = touches.clientY - HEIGHT;

            var DRAGEL_WIDTH = this.offsetWidth;

            var BODY_WIDTH = document.documentElement.clientWidth;

            var DRAGEL_HEIGHT = this.offsetHeight;

            var BODY_HEIGHT = document.documentElement.clientHeight;

            if (LEFT < 0) {

                LEFT = 0;

            } else if (LEFT > BODY_WIDTH - DRAGEL_WIDTH) {

                LEFT = BODY_WIDTH - DRAGEL_WIDTH;

            }

            if (TOP < 0) {

                TOP = 0

            } else if (TOP > BODY_HEIGHT - DRAGEL_HEIGHT) {

                TOP = BODY_HEIGHT - DRAGEL_HEIGHT;

            }

            this.style.left = LEFT + 'px';

            this.style.top = TOP + 'px';

        }, false);

        dragEl.addEventListener('touchend', function (e) {

            document.body.removeEventListener('touchmove', function (e) {

                e.preventDefault()

            }, false)

        }, false);

    </script>

    </body>

    </html>

    touch 事件:

    touchstart: //触摸屏幕时触发;即使已经有一个手指放在了屏幕上也会触发。

    touchmove: //在屏幕上滑动时连续的触发。在这个事件发生期间,调用preventDefault()可阻止滚动。

    touchend: //从屏幕上移开时触发。

    touchcancel: //系统取消touch事件的时候触发,这个好像比较少用。

    每个触摸事件都包括了三个触摸列表:

    touches:表示当前跟踪的触摸操作的touch对象的数组。

    当一个手指在触屏上时,event.touches.length=1,

    当两个手指在触屏上时,event.touches.length=2,以此类推。

    targetTouches:特定于事件目标的touch对象数组。因为touch事件是会冒泡的,所以利用这个属性指出目标对象。

    changedTouches:表示自上次触摸以来发生了什么改变的touch对象的数组。

    这些列表里的每次触摸由touch对象组成,touch对象里包含着触摸信息,主要属性如下:

    clientX://触摸目标在视口中的x坐标。

    clientY://触摸目标在视口中的y坐标。

    identifier://标识触摸的唯一ID。

    pageX://触摸目标在页面中的x坐标。

    pageY://触摸目标在页面中的y坐标。

    screenX://触摸目标在屏幕中的x坐标。

    screenY://触摸目标在屏幕中的y坐标。

    target://触摸的DOM节点目标。

    offsetLeft offsetTop offsetWidth offsetHeight

    offsetLeft:元素的边框的外边缘距离与已定位的父容器(offsetparent)的左边距离(不包括元素的边框和父容器的边框)。

    offsetTop:同理是指元素的边框的外边缘距离与已定位的父容器(offsetparent)的上边距离(不包括元素的边框和父容器的边框)。

    offsetWidth:描述元素外尺寸宽度,是指元素内容宽度+内边距宽度(左右两个)+边框(左右两个),不包括外边距和滚动条部分。

    offsetHeight:同理 描述元素外尺寸高度,是指 元素内容高度+内边距高度(上下两个)+边框(上下两个),不包括外边距和滚动条部分。

    clientLeft clientTop clientWidth clientHeight

    clientLeft:元素的内边距的外边缘和边框的外边缘的距离,实际就是边框的左边框宽度

    clientTop:同理边框的上边框的宽度

    clientWidth:用于描述元素内尺寸宽度,是指 元素内容+内边距 大小,不包括边框、外边距、滚动条部分

    clientHeight:同理 用于描述元素内尺寸高度,是指 元素内容+内边距 大小,不包括边框、外边距、滚动条部分

    scrollTop scrollLeft scrollWidth scrollHeight

    scrollWidth:内容区域尺寸加上内边距加上溢出尺寸,当内容正好和内容区域匹配没有溢出时,这些属性与clientWidth和clientHeight相等 !important

    scrollHeight:同上

    scrollTop:滚动条上方卷去的高度

    scrollLeft:滚动条左边卷去的宽度

    相关文章

      网友评论

          本文标题:移动端图标拖拽,移动

          本文链接:https://www.haomeiwen.com/subject/nchqfctx.html