广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >vue实现移动端拖拽悬浮按钮
  • 663
分享到

vue实现移动端拖拽悬浮按钮

2024-04-02 19:04:59 663人浏览 安东尼
摘要

目录功能介绍:大致需求:整体思路:具体实现:一、position:fixed布局:二、touch事件绑定:三、页面引入:本文实例为大家分享了Vue实现移动端拖拽悬浮按钮的具体代码,供

目录
  • 功能介绍:
  • 大致需求:
  • 整体思路:
  • 具体实现:
    • 一、position:fixed布局:
    • 二、touch事件绑定:
    • 三、页面引入:

本文实例为大家分享了Vue实现移动端拖拽悬浮按钮的具体代码,供大家参考,具体内容如下

功能介绍:

在移动端开发中,实现悬浮按钮在侧边显示,为不遮挡页面内容,允许手指拖拽换位。

大致需求:

1、按钮在页面侧边悬浮显示;

2、手指长按按钮,按钮改变样式,允许拖拽改变位置;

3、按钮移动结束,手指松开,计算距离左右两侧距离并自动移动至侧边显示;

4、移动至侧边后,按钮根据具体左右两次位置判断改变现实样式;

整体思路:

1、按钮实行position:fixed布局,在页面两侧最上层悬浮显示;

2、手指长按可使用定时器来判断,若手指松开,则关闭定时器,等待下次操作再启用;

3、跟随手指移动计算按钮与页面两侧的距离,判断手指松开时停留的位置;

简单效果展示:

具体实现:

一、position:fixed布局:

使用定位实现

<!-- 外层ul控制卡片范围 -->
<div>
    <div class="floatBtn" 
        :class="[{moveBtn: lonGClick}, `${btnType}Btn`]">
    <span>悬浮按钮</span>
  </div>
</div>
<style lang="sCSS" scoped>
  @mixin notSelect{
    -moz-user-select:none; 
    -WEBkit-user-select:none; 
    -ms-user-select:none; 
    -khtml-user-select:none; 
    user-select:none;
  }
  @mixin not-touch {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
  }
  .floatBtn {
    @include notSelect;
    @include not-touch();
    position: fixed;
    z-index: 1;
    overflow: hidden;
    width: 100px;
    left: calc(100% - 100px);
    top: calc(100% - 100px);
    color: #E0933A;
    background: #FCEBD0;
    font-size: 14px;
    height: 36px;
    line-height: 36px;
    text-align: center;
    box-sizing: border-box;
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 10px;
    &.rightBtn {
      border-radius: 20px 0 0 20px;
    }
    &.leftBtn {
      border-radius: 0 20px 20px 0;
    }
    &.moveBtn {
      border-radius: 20px;
    }
  }
</style>

二、touch事件绑定:

应用到touchstart,touchmove,touchend事件,使用定时器实现长按效果:

<div class="floatBtn"
    :class="[{moveBtn: longClick}, `${btnType}Btn`]"
    @touchstart="touchstart($event)"
    @touchmove="touchMove($event)"
    @touchend="touchEnd($event)"
>
    <span>悬浮按钮</span>
</div>
<script>
export default {
    data() {
        return {
            timeOutEvent: 0,
            longClick: 0,
            // 手指原始位置
            oldMousePos: {},
            // 元素原始位置
            oldnodePos: {},
            btnType: 'right'
        };
    },
    touchstart(ev) {
        // 定时器控制长按时间,超过500毫秒开始进行拖拽
        this.timeOutEvent = setTimeout(() => {
            this.longClick = 1;
        }, 500);
        const selectDom = ev.currentTarget;
        const { pageX, pageY } = ev.touches[0]; // 手指位置
        const { offsetLeft, offsetTop } = selectDom; // 元素位置
        // 手指原始位置
        this.oldMousePos = {
            x: pageX,
            y: pageY
        };
        // 元素原始位置
        this.oldNodePos = {
            x: offsetLeft,
            y: offsetTop
        };
        selectDom.style.left = `${offsetLeft}px`;
        selectDom.style.top = `${offsetTop}px`;
    },
    touchMove(ev) {
        // 未达到500毫秒就移动则不触发长按,清空定时器
        clearTimeout(this.timeOutEvent);
        if (this.longClick === 1) {
            const selectDom = ev.currentTarget;
            // x轴偏移量
            const lefts = this.oldMousePos.x - this.oldNodePos.x;
            // y轴偏移量
            const tops = this.oldMousePos.y - this.oldNodePos.y;
            const { pageX, pageY } = ev.touches[0]; // 手指位置
            selectDom.style.left = `${pageX - lefts}px`;
            selectDom.style.top = `${pageY - tops}px`;
        }
    },
    touchEnd(ev) {
        // 清空定时器
        clearTimeout(this.timeOutEvent);
        if (this.longClick === 1) {
            this.longClick = 0;
            const selectDom = ev.currentTarget;
            const {clientWidth, clientHeight} = document.body;
            const {offsetLeft, offsetTop} = selectDom;
            selectDom.style.left = 
                (offsetLeft + 50) > (clientWidth / 2) ? 
                'calc(100% - 100px)' : 0;
            if (offsetTop < 90) {
                selectDom.style.top = '90px';
            } else if (offsetTop + 36 > clientHeight) {
                selectDom.style.top = `${clientHeight - 36}px`;
            }
            this.btnType = 
                (offsetLeft + 50) > (clientWidth / 2) ? 
                'right' : 'left';
        }
    },
};
</script>

三、页面引入:

单个页面引入

<template>
    <floatBtn/>
</template>
<script>
import floatBtn from './floatBtn';
export default {
    components: {
        floatBtn
    },
};
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: vue实现移动端拖拽悬浮按钮

本文链接: https://www.lsjlt.com/news/34264.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue实现移动端拖拽悬浮按钮
    目录功能介绍:大致需求:整体思路:具体实现:一、position:fixed布局:二、touch事件绑定:三、页面引入:本文实例为大家分享了vue实现移动端拖拽悬浮按钮的具体代码,供...
    99+
    2022-09-27
  • vue如何实现移动端拖拽悬浮按钮
    这篇文章主要讲解了“vue如何实现移动端拖拽悬浮按钮”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现移动端拖拽悬浮按钮”吧!功能介绍:在移动端开发中,实现悬浮按钮在侧边显示,为不...
    99+
    2023-07-02
  • jquery实现移动端悬浮拖拽框
    使用jquery 实现了一个基础的悬浮弹拖拽窗, 根据自己的需求去完善动效。 分享给大家供大家参考,具体如下: 演示效果 代码块 需要引入jquery , 引入本地或线上根据自己的...
    99+
    2022-11-13
  • Android如何实现自定义可拖拽的悬浮按钮DragFloatingActionButton
    这篇文章主要介绍Android如何实现自定义可拖拽的悬浮按钮DragFloatingActionButton,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!悬浮按钮FloatingActionButton是Androi...
    99+
    2023-05-31
    android
  • jQuery实现移动端悬浮拖动效果
    模拟手机端悬浮按钮功能,自动吸附两边,并且不能超过活动区域,上下超过自动吸附上或下 因为是移动端端事件,需要调试到移动端才可以看效果 以下是代码 <!DOCTYPE ht...
    99+
    2022-11-13
  • 使用vue怎么实现一个可移动的悬浮按钮
    使用vue怎么实现一个可移动的悬浮按钮?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟...
    99+
    2023-06-06
  • android 应用内部悬浮可拖动按钮简单实现代码
    本文介绍了android 应用内部悬浮可拖动按钮简单实现代码,分享给大家,具体如下:可以悬浮在activity上面,在加载fragment时悬浮按钮不会消失实现方式很简单,因为是在应用内部拖动的,只需要通过Activity获取WindowM...
    99+
    2023-05-30
    android 悬浮 拖动
  • vue实现移动端touch拖拽排序
    目录功能介绍:大致需求:整体思路:简单效果展示:具体实现:一、display:flex+v-for布局:二、touch事件绑定:三、卡片移动:四、获取手指所在位置:五、操作数组(删除...
    99+
    2022-09-27
  • vue实现移动端的开关按钮
    本文实例为大家分享了vue实现移动端的开关按钮的具体代码,供大家参考,具体内容如下 逻辑: 1.写一个椭圆形的div 2.动态改变这个椭圆形的div的背景颜色 3.写一个圆点,这个圆...
    99+
    2022-11-13
  • vue实现移动端可拖拽式icon图标
    本文实例为大家分享了vue实现移动端可拖拽式icon图标的具体代码,供大家参考,具体内容如下 需求描述:在移动端页面悬浮一个可随便拖拽的图标,类似于苹果手机的辅助触控小圆点,并且可随...
    99+
    2022-11-13
  • vue怎么实现移动端的开关按钮
    本篇内容主要讲解“vue怎么实现移动端的开关按钮”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现移动端的开关按钮”吧!逻辑:写一个椭圆形的div动态改变这个椭圆形的div的背景颜色写...
    99+
    2023-06-29
  • Jquery实现移动端控制DIV拖拽
    本文实例为大家分享了Jquery实现移动端控制DIV拖拽的具体代码,供大家参考,具体内容如下 需求:车型配置表,移动端需要滑动,并且多项配置的表需要联动对应头部分类名称 要求:左侧 ...
    99+
    2022-11-13
  • jquery实现移动端按钮组左右滑动
    本文实例为大家分享了jquery实现移动端按钮组左右滑动的具体代码,供大家参考,具体内容如下 学习移动端触摸相关功能时写了一个例子,共享一下,其中最不好理解的是screen、page...
    99+
    2022-11-13
  • typescript+react实现移动端和PC端简单拖拽效果
    本文实例为大家分享了typescript+react实现移动端和PC端简单拖拽效果的具体代码,供大家参考,具体内容如下 一、移动端 1.tsx代码 import { Compon...
    99+
    2022-11-12
  • vue实现移动端div拖动效果
    本文实例为大家分享了vue实现移动端div拖动的具体代码,供大家参考,具体内容如下 手机上会偶尔用到拖动div的效果,虽然我自己还没遇到,先写一个以防万一,需要注明的是,具体实现代码...
    99+
    2022-11-13
  • vue项目实现按钮可随意移动
    vue项目中实现按钮可随意移动,供大家参考,具体内容如下 组件代码如下: 在项目中引入该组件即可 <template>   <div v-show="hide" c...
    99+
    2022-11-13
  • jquery怎么实现移动端按钮组左右滑动
    本文小编为大家详细介绍“jquery怎么实现移动端按钮组左右滑动”,内容详细,步骤清晰,细节处理妥当,希望这篇“jquery怎么实现移动端按钮组左右滑动”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。学习移动端触摸...
    99+
    2023-06-29
  • Vue如何实现悬浮框自由移动+录音功能
    本篇内容介绍了“Vue如何实现悬浮框自由移动+录音功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果如下主要功能一个漂浮的球,在全屏幕中...
    99+
    2023-07-02
  • vue怎么实现移动端div拖动效果
    本文小编为大家详细介绍“vue怎么实现移动端div拖动效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么实现移动端div拖动效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、分享代码html代码&...
    99+
    2023-06-29
  • Vue实现悬浮框自由移动+录音功能的示例代码
    目录效果如下主要功能实现1.封装第一个漂浮组件FloatBall.vue2.封装第二个组件录音组件Audio.vue3.recorder.js效果如下 主要功能 1.一个漂浮的球...
    99+
    2022-11-13
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作