返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue实现移动端可拖拽式icon图标
  • 492
分享到

vue实现移动端可拖拽式icon图标

2024-04-02 19:04:59 492人浏览 薄情痞子
摘要

本文实例为大家分享了Vue实现移动端可拖拽式icon图标的具体代码,供大家参考,具体内容如下 需求描述:在移动端页面悬浮一个可随便拖拽的图标,类似于苹果手机的辅助触控小圆点,并且可随

本文实例为大家分享了Vue实现移动端可拖拽式icon图标的具体代码,供大家参考,具体内容如下

需求描述:在移动端页面悬浮一个可随便拖拽的图标,类似于苹果手机的辅助触控小圆点,并且可随意拖动。

预览:

组件代码如下:

<template>
    <div class="ys-float-btn" :style="{'width':itemWidth+'px','height':itemHeight+'px','left':left+'px','top':top+'px'}"
         ref="div"
         @click ="onBtnClicked">
        <slot name="icon"></slot>
        <SvgIcon :iconClass="'changjianwentijieda'"
                 :style="{'width':itemWidth+'px','height':itemHeight+'px'}"/>
    </div>
</template>
 
 
<script>
    export default {
        name: "DragIcon",
        props:{
            itemWidth:{
                type:Number,
                default:40
            },
            itemHeight:{
                type:Number,
                default:40
            },
            gapWidth:{
                type:Number,
                default:10
            },
 
            coefficientHeight:{
                type:Number,
                default:0.8
            }
        },
        created(){
            this.clientWidth = document.documentElement.clientWidth;
            this.clientHeight = document.documentElement.clientHeight;
            this.left = this.clientWidth - this.itemWidth - this.gapWidth;
            this.top = this.clientHeight*this.coefficientHeight;
        },
        mounted(){
            this.$nextTick(()=>{
                const div = this.$refs.div;
                div.addEventListener("touchstart",(e)=>{
                    e.stopPropagation();
                    div.style.transition = 'none';
                });
                div.addEventListener("touchmove",(e)=>{
                        e.stopPropagation();
                        if (e.targetTouches.length === 1) {
                            let touch = event.targetTouches[0];
                            this.left = touch.clientX - this.itemWidth/2;
                            this.top = touch.clientY - this.itemHeight/2;
                        }
                    },
                    false
                );
                div.addEventListener("touchend",(e)=>{
                    e.stopPropagation();
                    div.style.transition = 'all 0.3s';
                    if(this.left>this.clientWidth/2){
                        this.left = this.clientWidth - this.itemWidth - this.gapWidth;
                    }else{
                        this.left = this.gapWidth;
                    }
                    if(this.top<=36)
                    {
                        this.top=36+this.gapWidth
                    }
                    else{
                        let bottom=this.clientHeight-50-this.itemHeight-this.gapWidth
                        console.log(bottom,this.top)
                        if(this.top>=bottom)
                        {
                            this.top=bottom
                        }
 
                    }
                });
            });
        },
 
        methods:{
            onBtnClicked(){
                this.$emit("onFloatBtnClicked");
            },
 
        },
        data(){
            return{
                timer:null,
                currentTop:0,
                clientWidth:0,
                clientHeight:0,
                left:0,
                top:0,
            }
        }
    }
</script>
 
<style lang="sCSS" scoped>
    .ys-float-btn{
        background:rgba(56,181,77,1);
        box-shadow:0 2px 10px 0 rgba(0,0,0,0.1);
        border-radius:50%;
        color: #666666;
        z-index: 20;
        transition: all 0.3s;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        position: fixed;
        bottom: 20vw;
 
        img{
            width: 50%;
            height: 50%;
            object-fit: contain;
            margin-bottom: 3px;
        }
    }
    .su_img{
        width: 40px;
        height: 40px;
        margin: 8px 0 0 0;
    }
 
</style>

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

--结束END--

本文标题: vue实现移动端可拖拽式icon图标

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

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

猜你喜欢
  • vue实现移动端可拖拽式icon图标
    本文实例为大家分享了vue实现移动端可拖拽式icon图标的具体代码,供大家参考,具体内容如下 需求描述:在移动端页面悬浮一个可随便拖拽的图标,类似于苹果手机的辅助触控小圆点,并且可随...
    99+
    2024-04-02
  • vue实现移动端touch拖拽排序
    目录功能介绍:大致需求:整体思路:简单效果展示:具体实现:一、display:flex+v-for布局:二、touch事件绑定:三、卡片移动:四、获取手指所在位置:五、操作数组(删除...
    99+
    2024-04-02
  • vue实现移动端拖拽悬浮按钮
    目录功能介绍:大致需求:整体思路:具体实现:一、position:fixed布局:二、touch事件绑定:三、页面引入:本文实例为大家分享了vue实现移动端拖拽悬浮按钮的具体代码,供...
    99+
    2024-04-02
  • vue实现拖拽小图标
    如何给vue项目里面写拖拽悬浮小图标呢,供大家参考,具体内容如下 首先 1、html文件 一定要给父盒子一个ID <div       class="xuanfu"      ...
    99+
    2024-04-02
  • vue如何实现移动端拖拽悬浮按钮
    这篇文章主要讲解了“vue如何实现移动端拖拽悬浮按钮”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue如何实现移动端拖拽悬浮按钮”吧!功能介绍:在移动端开发中,实现悬浮按钮在侧边显示,为不...
    99+
    2023-07-02
  • jquery实现移动端悬浮拖拽框
    使用jquery 实现了一个基础的悬浮弹拖拽窗, 根据自己的需求去完善动效。 分享给大家供大家参考,具体如下: 演示效果 代码块 需要引入jquery , 引入本地或线上根据自己的...
    99+
    2024-04-02
  • Jquery实现移动端控制DIV拖拽
    本文实例为大家分享了Jquery实现移动端控制DIV拖拽的具体代码,供大家参考,具体内容如下 需求:车型配置表,移动端需要滑动,并且多项配置的表需要联动对应头部分类名称 要求:左侧 ...
    99+
    2024-04-02
  • vue实现移动端div拖动效果
    本文实例为大家分享了vue实现移动端div拖动的具体代码,供大家参考,具体内容如下 手机上会偶尔用到拖动div的效果,虽然我自己还没遇到,先写一个以防万一,需要注明的是,具体实现代码...
    99+
    2024-04-02
  • vue实现div高度可拖拽
    本文实例为大家分享了vue实现div高度可拖拽的具体代码,供大家参考,具体内容如下 这里有一个现成的demo,可以实现页面div的拖拽功能,但是和我想要的效果不是很一样,所以说后边有...
    99+
    2024-04-02
  • typescript+react实现移动端和PC端简单拖拽效果
    本文实例为大家分享了typescript+react实现移动端和PC端简单拖拽效果的具体代码,供大家参考,具体内容如下 一、移动端 1.tsx代码 import { Compon...
    99+
    2024-04-02
  • vue实现图片拖拽功能
    本文实例为大家分享了vue实现图片拖拽功能的具体代码,供大家参考,具体内容如下 1、主要涉及到的元素知识,示意图: 2、js代码部分: directives: { dr...
    99+
    2024-04-02
  • vue-draggable实现pc端拖拽效果
    本文实例为大家分享了vue-draggable实现pc端拖拽效果的具体代码,供大家参考,具体内容如下 为了实现下面这种布局可拖拽整合调整位置 拖拽前: 拖拽后: 一、安装 npm...
    99+
    2024-04-02
  • vue实现可拖拽的dialog弹框
    本文主要介绍了vue实现可拖拽的dialog弹框,分享给大家,具体如下: element的dialog弹框在项目中挺常用的。但有时候嵌套的话会遮住,体验不好。拖拽形式的弹框会提高用...
    99+
    2024-04-02
  • 实现vue图片缩放方式-拖拽组件
    目录实现效果如下父组件如下子组件imgbox.vue如下实现效果如下 这几天做了个没做过的组件,以此记录下,需要的效果是在一个dom内,缩放拖拽图片。 封装的子组件imgbox.V...
    99+
    2024-04-02
  • vue怎么实现移动端div拖动效果
    本文小编为大家详细介绍“vue怎么实现移动端div拖动效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么实现移动端div拖动效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、分享代码html代码&...
    99+
    2023-06-29
  • Vue实现拖拽式分割布局
    本文实例为大家分享了Vue实现拖拽式分割布局的具体代码,供大家参考,具体内容如下 示例展示 代码 特地写了一个demo代码,可以直接复制下来运行 <!DOCTYPE html...
    99+
    2024-04-02
  • Vue实现可拖拽组件的方法
    本文为大家分享了Vue实现可拖拽、拖拽组件,供大家参考,具体内容如下 描述: 组件仅封装拖拽功能,内容通过#header、#default、#footer插槽 自定义 效果:&nbs...
    99+
    2024-04-02
  • vue怎么实现图片拖拽功能
    本篇内容介绍了“vue怎么实现图片拖拽功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!主要涉及到的元素知识,示意图:js代码部分:dire...
    99+
    2023-06-25
  • vue实现拖拽滑动分割面板
    本文实例为大家分享了vue实现拖拽滑动分割面板的具体代码,供大家参考,具体内容如下 需求背景 左边是列表,右边是详情。 想更大范围的查看详情,所以要拖拽滑块,进行面板的分割 整体思路...
    99+
    2024-04-02
  • vue-draggable怎么实现pc端拖拽效果
    本文小编为大家详细介绍“vue-draggable怎么实现pc端拖拽效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue-draggable怎么实现pc端拖拽效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作