返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue项目实现按钮可随意移动
  • 688
分享到

vue项目实现按钮可随意移动

2024-04-02 19:04:59 688人浏览 八月长安
摘要

Vue项目中实现按钮可随意移动,供大家参考,具体内容如下 组件代码如下: 在项目中引入该组件即可 <template>   <div v-show="hide" c

Vue项目中实现按钮可随意移动,供大家参考,具体内容如下

组件代码如下:

在项目中引入该组件即可

<template>
  <div v-show="hide" class="move-button" ref="moveBtn"
       @mousedown="btnDown"
       @touchstart="btnDown"
       @mousemove="btnMove"
       @touchmove="btnMove"
       @mouseup="btnEnd"
       @touchend="btnEnd"
       @touchcancel="btnEnd">
    <div class="button-mainbg">
    </div>
    </div>
</template>

<script>
export default {
    name: 'MoveButton',
    data() {
        return {
            hide: true,
            img: require('@/assets/img/moveButton.png'),
            flags: false,
            position: {
                x: 0,
                y: 0
            },
            nx: '',
            ny: '',
            dx: '',
            dy: '',
            xPum: '',
            yPum: '',
            isshow: false,
            moveBtn: {},
            timer: null,
            currentTop:0
        }
    },
    mounted() {
        this.moveBtn = this.$refs.moveBtn;
        window.addEventListener('scroll', this.hideButton);
    },
    beforeDestroy() {
        window.addEventListener('scroll', this.hideButton);
    },
    methods: {
        hideButton() {
            this.timer&&clearTimeout(this.timer);
            this.timer = setTimeout(()=>{
             this.handleScrollEnd();
            },300);
            this.currentTop = document.documentElement.scrollTop || document.body.scrollTop;
            this.hide = false;
        },
        handleScrollEnd(){
            let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
            if(scrollTop === this.currentTop){
            this.hide = true;
            clearTimeout(this.timer);
            }
        },

        // 实现移动端拖拽
      btnDown() {
            this.flags = true;
            let touch;
            if (event.touches) {
                touch = event.touches[0];
            } else {
                touch = event;
            }
            this.position.x = touch.clientX;
            this.position.y = touch.clientY;
            this.dx = this.moveBtn.offsetLeft;
            this.dy = this.moveBtn.offsetTop;
        },
      btnMove() {
            if (this.flags) {
                let touch;
                if (event.touches) {
                    touch = event.touches[0];
                } else {
                    touch = event;
                }
                this.nx = touch.clientX - this.position.x;
                this.ny = touch.clientY - this.position.y;
                this.xPum = this.dx + this.nx;
                this.yPum = this.dy + this.ny;
                let clientWidth = document.documentElement.clientWidth;
              let clientHeight = document.documentElement.clientHeight;
                if (this.xPum > 0 && this.xPum < (clientWidth - this.moveBtn.offsetWidth)) {
                    this.moveBtn.style.left = this.xPum + "px";
                }
                if (this.yPum > 0 && this.yPum < (clientHeight - this.moveBtn.offsetHeight)) {
                    this.moveBtn.style.top = this.yPum + "px";
                }

                //阻止页面的滑动默认事件
                document.addEventListener("touchmove", this.handler, {
                    passive: false
                });
            }
        },
        //鼠标释放时候的函数
        btnEnd() {
            this.flags = false;
            document.addEventListener('touchmove', this.handler, {
                passive: false
            });
        },
        handler(e) {
            if(this.flags){
                event.preventDefault();
            }else{
                return true
            }
        }
    }
}
</script>

<style lang="stylus" scoped>
.move-button {

    border-radius:50%;
    width: 50px;
    height: 50px;
    position: fixed;
    z-index: 10;

  color: #FFF;

  .button-mainbg{
    position: relative;
    width:50px;
    height:50px;
    border-radius:50%;
    background: url("../../assets/img/moveButton.png") no-repeat;
    background-size: 50px 50px;
  }


}
</style>

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

--结束END--

本文标题: vue项目实现按钮可随意移动

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

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

猜你喜欢
  • vue项目实现按钮可随意移动
    vue项目中实现按钮可随意移动,供大家参考,具体内容如下 组件代码如下: 在项目中引入该组件即可 <template>   <div v-show="hide" c...
    99+
    2024-04-02
  • vue实现移动端的开关按钮
    本文实例为大家分享了vue实现移动端的开关按钮的具体代码,供大家参考,具体内容如下 逻辑: 1.写一个椭圆形的div 2.动态改变这个椭圆形的div的背景颜色 3.写一个圆点,这个圆...
    99+
    2024-04-02
  • vue实现移动端拖拽悬浮按钮
    目录功能介绍:大致需求:整体思路:具体实现:一、position:fixed布局:二、touch事件绑定:三、页面引入:本文实例为大家分享了vue实现移动端拖拽悬浮按钮的具体代码,供...
    99+
    2024-04-02
  • vue项目中实现按钮防抖方法
    目录1.新建 .js文件存放防抖方法2.引入防抖文件,methods中添加方法3.html代码1.新建 .js文件存放防抖方法 // 防抖 export const antiShak...
    99+
    2022-12-14
    vue 按钮防抖 vue实现防抖
  • 使用vue怎么实现一个可移动的悬浮按钮
    使用vue怎么实现一个可移动的悬浮按钮?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟...
    99+
    2023-06-06
  • vue怎么实现移动端的开关按钮
    本篇内容主要讲解“vue怎么实现移动端的开关按钮”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现移动端的开关按钮”吧!逻辑:写一个椭圆形的div动态改变这个椭圆形的div的背景颜色写...
    99+
    2023-06-29
  • vue如何实现移动端拖拽悬浮按钮
    这篇文章主要讲解了“vue如何实现移动端拖拽悬浮按钮”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现移动端拖拽悬浮按钮”吧!功能介绍:在移动端开发中,实现悬浮按钮在侧边显示,为不...
    99+
    2023-07-02
  • jquery实现移动端按钮组左右滑动
    本文实例为大家分享了jquery实现移动端按钮组左右滑动的具体代码,供大家参考,具体内容如下 学习移动端触摸相关功能时写了一个例子,共享一下,其中最不好理解的是screen、page...
    99+
    2024-04-02
  • jquery怎么实现移动端按钮组左右滑动
    本文小编为大家详细介绍“jquery怎么实现移动端按钮组左右滑动”,内容详细,步骤清晰,细节处理妥当,希望这篇“jquery怎么实现移动端按钮组左右滑动”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。学习移动端触摸...
    99+
    2023-06-29
  • SpringBoot项目中@Test不出现可点击运行的按钮问题
    目录@Test不出现可点击运行的按钮单元测试中有了@Test注解但是idea没有执行的按钮查阅了下资料,原理是解决办法扩展@Test不出现可点击运行的按钮 SpringBoot项目的...
    99+
    2024-04-02
  • 在vue移动端项目中怎么实现页面缓存
    这篇文章主要介绍在vue移动端项目中怎么实现页面缓存,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!背景在移动端中,页面跳转之间的缓存是必备的一个需求。例如:首页=>列表页=>详情页。从首页进入列表页,列表...
    99+
    2023-06-14
  • vue-cli3配置多项目并按项目分别实现打包
    目录vue-cli3配置多项目并按项目分别打包项目结构vue.config.js相关配置注意最后一步补充:开发环境如何进入不同项目环境总结vue-cli3配置多项目并按项目分别打包 ...
    99+
    2023-01-14
    vue-cli3配置多项目 vue-cli3打包 vue-cli3配置
  • iOS实现支付宝蚂蚁森林随机按钮及抖动效果
    工作中遇到了一个需求 要做一个类似于蚂蚁森林的 在一定范围内随机出现 不相交且有上下抖动的控件 做完的图 如下 WechatIMG3.jpeg 这个需求在做的时候 需要注意几个地方...
    99+
    2022-05-16
    iOS 支付宝 按钮
  • Android动画 实现开关按钮动画(属性动画之平移动画)实例代码
    Android动画 实现开关按钮动画(属性动画之平移动画),最近做项目,根据项目需求,有一个这样的功能,实现类似开关的动画效果,经过自己琢磨及上网查找资料,终于解决了,这里就记...
    99+
    2022-06-06
    开关 属性 按钮 Android
  • vue实现移动端可拖拽式icon图标
    本文实例为大家分享了vue实现移动端可拖拽式icon图标的具体代码,供大家参考,具体内容如下 需求描述:在移动端页面悬浮一个可随便拖拽的图标,类似于苹果手机的辅助触控小圆点,并且可随...
    99+
    2024-04-02
  • Vue项目中实现ElementUI按需引入过程解析
    目录前言按需引入一、误区二、正确手法1、安装插件2、更改.babelrc配置3、 新建auto-import-elementUI.js文件,注册需要用到的组件4、main.js引入前...
    99+
    2023-05-19
    Vue ElementUI按需引入 Vue ElementUI vue按需引入
  • vue移动端项目中如何实现页面缓存的示例代码
    背景 在移动端中,页面跳转之间的缓存是必备的一个需求。 例如:首页=>列表页=>详情页。 从首页进入列表页,列表页需要刷新,而从详情页返回列表页,列表页则需要保持页面缓...
    99+
    2024-04-02
  • android 应用内部悬浮可拖动按钮简单实现代码
    本文介绍了android 应用内部悬浮可拖动按钮简单实现代码,分享给大家,具体如下:可以悬浮在activity上面,在加载fragment时悬浮按钮不会消失实现方式很简单,因为是在应用内部拖动的,只需要通过Activity获取WindowM...
    99+
    2023-05-30
    android 悬浮 拖动
  • C#实现WPF项目复制和移动文件夹
    使用WPF做的一个简单的操作文件的demo,包括复制和移动文件夹,核心思想就是使用递归,如果只是移动或者复制单一文件,直接使用File.Copy()或者File.Move()方法即可...
    99+
    2024-04-02
  • vue项目中如何实现element-ui组件按需引入
    目录element-ui组件按需引入按需引入完整引入vue项目搭建 + 引入element-ui初始化单页系统ElementUI整合项目element-ui组件按需引入 按需引入 1...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作