vue 浏览器右侧可拖拽小组件

news2024/9/19 10:56:29

目录

0. 使用场景

1. 动图示例

 2. 实现方式

2.1 创建drag.js

2.2 使用v-drag

3. 结尾


0. 使用场景

很多网页在浏览器右侧有"导航"或者“智能助手”的悬浮小气泡框,比如我们的csdn☞

作为页面友好型的引导标注,某些场景下这些小气泡可以沿着浏览器的右侧进行上下的拖拽。

1. 动图示例

简单贴一张动图演示下效果

 2. 实现方式

用vue的自定义指令,做一个v-drag的操作指令,也有许多大佬分享了源码,只不过在此基础上稍加修改下限定,一直保持沿着浏览器右侧上线拖拽而已。

2.1 创建drag.js

// 实现拖动的js
import Vue from 'vue';
// 自定义拖拽指令,第一个参数'drag',即是拖拽指令名称
Vue.directive('drag', {
  bind: function (el) {
    const odiv = el;
    // 缓存 clientX clientY 的对象: 用于判断是点击事件还是移动事件
    const clientOffset = {};
    odiv.style.position = 'fixed';
    odiv.onmousedown = (e) => {
      const disX = e.clientX - odiv.offsetLeft;
      const disY = e.clientY - odiv.offsetTop;
      // 缓存 clientX clientY
      clientOffset.clientX = e.clientX;
      clientOffset.clientY = e.clientY;
      document.onmousemove = (e) => {
        const left = e.clientX - disX;
        const top = e.clientY - disY;
        // odiv.style.left = left + 'px'; // 放开该部分,可以进行全屏的拖拽
        odiv.style.right = '0px'; // 限制只能沿着右侧进行拖拽
        odiv.style.top = top + 'px';
        // odiv 距离顶部的距离
        const dragDivTop = window.innerHeight - odiv.getBoundingClientRect().height;
        // odiv 距离左部的距离
        const dragDivLeft = window.innerWidth - odiv.getBoundingClientRect().width;
        // 边界判断处理
        // 2、超出顶部处理
        if (odiv.getBoundingClientRect().top <= 0) {
          odiv.style.top = '0px';
        }
        // 3、超出底部处理
        if (odiv.getBoundingClientRect().top >= dragDivTop) {
          odiv.style.top = dragDivTop + 'px';
        }
        // 4、超出右边边界区域处理
        if (odiv.getBoundingClientRect().left >= dragDivLeft) {
          // odiv.style.left = dragDivLeft + 'px'; // 放开该部分,可以进行全屏的拖拽
          odiv.style.right = '0px'; // 限制只能沿着右侧进行拖拽
        }
        // 5、超出左边边界区域处理
        if (odiv.getBoundingClientRect().left <= 0) {
          // odiv.style.left = '0px'; // 放开该部分,可以进行全屏的拖拽
          odiv.style.right = '0px'; // 限制只能沿着右侧进行拖拽
        }
      };
      document.onmouseup = () => {
        document.onmousemove = null;
        document.onmouseup = null;
      };
    };
    // 绑定鼠标松开事件
    odiv.addEventListener('mouseup', (event) => {
      const clientX = event.clientX;
      const clientY = event.clientY;
      if (clientX === clientOffset.clientX && clientY === clientOffset.clientY) {
        return false;
        // console.log('click 事件');
      } else {
        return false;
        // console.log('drag 事件');
      }
    });
  }
});

其中这部分👇

odiv.style.right = '0px'; // 限制只能沿着右侧进行拖拽

 是限制拖拽位置的,共有三处,注释掉放开上一行的代码,即可实现全屏的拖拽。

2.2 使用v-drag

使用非常简单,如上图👆所示,加一个v-drag指令即可

3. 结尾

源码参考☞vue自定义组件实现右下角悬浮工具栏。vue实现可以拖动的右下角悬浮菜单。点击悬浮菜单,弹出一个自定义的弹窗组件,组件传参。vue模板 - 剑轩的专栏 - TNBLOG感谢🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MacBook触控板窗口管理 Swish for Mac

Swish for Mac是一款用于通过手势来控制mac应用窗口的软件&#xff0c;你可以通过这款软件在触控板上进行手势控制&#xff0c;你可以在使用前预设好不同手势的功能&#xff0c;然后就能直接通过这些手势让窗口按照你想要的方式进行变动了 Swish 支持 Haptick Feedback 震动反…

途乐证券|互联金融概念爆发,安硕信息“20cm”涨停,高伟达等大涨

互联金融概念4日盘中强势拉升&#xff0c;截至发稿&#xff0c;安硕信息“20cm”涨停&#xff0c;高伟达、卓创资讯、慧博云通涨超12%&#xff0c;恒银科技、极点软件亦涨停&#xff0c;指南针涨超9%&#xff0c;金证股份涨逾7%。 高伟达昨日在投资者互动平台表明&#xff0c;公…

Kubernetes客户端认证—— 基于ServiceAccount的JWTToken认证

1、概述 在 Kubernetes 官方手册中给出了 “用户” 的概念&#xff0c;Kubernetes 集群中存在的用户包括 “普通用户” 与 “ServiceAccount”&#xff0c; 但是 Kubernetes 没有普通用户的管理方式&#xff0c;通常只是将使用集群根证书签署的有效证书的用户都被视为合法用户。…

实现组件大小随窗口大小变化

暂时只学会用代码的方式&#xff0c;如果后续了解到在可视化界面的属性栏中可以设置会进而更新分享 组件界面和一些属性 一些布局属性 详细代码实现 详细代码 //从这里开始复制下面的代码&#xff01;&#xff01;&#xff01;//第一步&#xff0c;定义控件自适应窗口类A…

恒盛策略:成交10天增10倍,“牛市旗手”太火了!TMT赛道股也重新活跃

A股商场周五上午高开&#xff0c;盘中大幅走强&#xff0c;但其后一度收窄涨幅&#xff0c;挨近上午收盘又从头有所回升。 作为“牛市旗手”&#xff0c;券商板块进一步上涨&#xff0c;成交额也进一步放量&#xff0c;上午半个交易日成交额现已打破900亿元&#xff0c;照此趋势…

由红黑树到map/set

文章目录 一.map/set 的封装思路1.封装思路2.红黑树节点调整3.map 和 set 的定义4.仿函数 KeyOfValue5.map/set 的插入 二.map/set 迭代器实现1.迭代器的定义2.解引用运算符重载3.成员访问运算符重载4.(不)等于运算符重载5.begin() 与 end()6. 运算符重载7.-- 运算符重载8.[ ]下…

公文,需要明确分工和流程,以确保公文的准时完成和质量保障

对于需要多人协作的公文&#xff0c;需要明确分工和流程&#xff0c;以确保公文的准时完成和质量保障。 具体来说&#xff0c;可以采取以下几个方面的工作&#xff1a; 1.明确分工&#xff1a;在多人协作的公文中&#xff0c;需要明确各自的职责和任务&#xff0c;合理分配工作…

Codeforces Round 881 (Div. 3)F1题解

文章目录 [Omsk Metro (simple version)](https://codeforces.com/contest/1843/problem/F1)问题分析1.分析如何知道根节点到某个结点的区间内是否存在一个子段和为k2.方法1使用树形DP来动态维护每个节点到根节点的最大子段和和最小子段和代码 Omsk Metro (simple version) 问题…

专业商城财务一体化-线上商城+进销存管理软件,批发零售全行业免费更新

订货流程繁琐&#xff1f;订单处理效率低&#xff1f;小程序商城与进销存系统不打通&#xff1f;数据需要手动输入同步&#xff1f;财务与的结算对账需要大量手工处理&#xff1f;零售批发从业者&#xff0c;如何你也有以上烦恼&#xff0c;可以看看进销存小程序订货商城&#…

软件设计师(六)结构化开发方法

结构化方法由结构化分析、结构化设计、结构化程序设计构成&#xff0c;它是一种面向数据流的开发方法。 分类说明结构化分析&#xff08;SA&#xff09;根据分解与抽象的原则&#xff0c;按照系统中数据处理的流程&#xff0c;用数据流图来建立系统的功能模型&#xff0c;从而…

Java错误小全

文章目录 NullPointer异常&#xff1a; 错误描述&#xff1a;当试图访问一个空引用对象的属性或调用空引用对象的方法时&#xff0c;会抛出NullPointer异常。 复现示例&#xff1a; String str null; System.out.println(str.length());解决方案&#xff1a;在使用对象之前&am…

JVM之两种垃圾判断方式

文章目录 一、所谓的垃圾二、引用计数器法三、可达性分析法GC Roots工作原理三色标记标记算法并发标记 一、所谓的垃圾 垃圾&#xff1a;如果一个或多个对象没有任何的引用指向它了&#xff0c;那么这个对象现在就是垃圾 在堆里存放着几乎所有的 Java 对象实例&#xff0c;在…

linux环境下pip下载包的基础使用

内网环境如何使用pip安装包 1、能连接到外网的电脑先下载好对应的whl文件 使用命令&#xff1a; pip3 download pymysql -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com下载好的文件&#xff1a; 将whl文件上传到内网机器中进行安装 pip3 in…

SpringCloudAlibaba之Sentinel(一)流控篇

前言&#xff1a; 为什么使用Sentinel&#xff0c;这是一个高可用组件&#xff0c;为了使我们的微服务高可用而生 我们的服务会因为什么被打垮&#xff1f; 一&#xff0c;流量激增 缓存未预热&#xff0c;线程池被占满 &#xff0c;无法响应 二&#xff0c;被其他服务拖…

React Native元素旋转一定的角度

mMeArrowIcon: {fontSize: 30, color: #999, transform: [{rotate: 180deg}]},<Icon name"arrow" style{styles.mMeArrowIcon}></Icon>参考链接&#xff1a; https://reactnative.cn/docs/transforms https://chat.xutongbao.top/

uniapp自定义头部导航栏

有时我们需要一些特殊的头部导航栏页面&#xff0c;取消传统的导航栏&#xff0c;来增加页面的美观度。 下面我就教大家如何配置&#xff1a; 一、效果图 二、实现 首先在uniapp中打开pages.json配置文件&#xff0c;在单个路由配置style里面设置导航栏样式​​​​​​nav…

《HeadFirst设计模式(第二版)》第四章代码——工厂模式

代码文件目录结构&#xff1a; Cheese: 原料ingredient类中只以Cheese为例&#xff0c;不重复展示&#xff1a; package Chapter4_FactoryPattern.abstractFactoryPattern.Ingredient;/*** Author 竹心* Date 2023/8/4**/public abstract class Cheese {String name;String g…

国货香水,真“香”吗?

【潮汐商业评论/原创】 Judy在选择香水这块还属于入门级选手&#xff0c;“我只买过一次YSL的自由之水&#xff0c;其他都是生日时朋友送给我的。如果真让我选&#xff0c;说实话我还真不知道买啥。”Judy偷笑着说。 在电影《香水》中&#xff0c;有一句台词说到&#xff0c;…

走进人工智能|自主无人系统 从概念到现实的飞跃

前言&#xff1a; 自主无人系统是具备自主感知、决策和执行能力的智能系统&#xff0c;无需人类干预即可完成任务的技术体系。 文章目录 序言AUS的现有应用从概念到现实的飞跃技术发展历程 目前形式领跑人困难和挑战 总结 自主无人系统&#xff08;Autonomous Unmanned Systems…

Vue2 第十九节 Vuex(二)

1.Vuex API 补充内容 2.getters 配置项 3.四个Map方法的使用 4.多组件共享数据 5.Vux模块化和命名空间 一.Vuex API补充内容 ① 在actions中&#xff0c;如果一个函数处理不完&#xff0c;可以继续调dispatch处理 ② 开发者工具是跟mutations中的数据进行交互的&#xff…