vue实现可移动的悬浮按钮


Posted in Vue.js onMarch 04, 2021

本文实例为大家分享了vue实现可随处移动悬浮按钮的具体代码,供大家参考,具体内容如下

1.html代码

<div
 class="callback float"
 @click="onClick"
 @mousedown="down"
 @touchstart="down"
 @mousemove="move"
 @touchmove="move"
 @mouseup="end"
 @touchend="end"
 ref="fu"
 >
 <!-- <p @click="callback">返回</p> -->
 <img @click="callback" src="@/assets/images/callbs.jpg" alt />
</div>

2.再data中定义

data() {
 return {
  isLoading: false,
  flags: false, //控制使用
  position: {
  x: 0,
  y: 0,
  },
  nx: "",
  ny: "",
  dx: "",
  dy: "",
  xPum: "",
  yPum: "",
 };
 },

3.js代码

methods: {
 callback() {
  this.$router.go(-1);
 },
 onRefresh() {
  // window.location.reload();
  setTimeout((res) => {
  console.log(res);
  this.isLoading = false;
  }, 1000);
 },
 down() {
  this.flags = true;
  var touch;
  if (event.touches) {
  touch = event.touches[0];
  } else {
  touch = event;
  }
  this.position.x = touch.clientX;
  this.position.y = touch.clientY;
  this.dx = this.$refs.fu.offsetLeft;
  this.dy = this.$refs.fu.offsetTop;
 },
 move() {
  if (this.flags) {
  var 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 width = window.innerWidth - this.$refs.fu.offsetWidth; //屏幕宽度减去自身控件宽度
  let height = window.innerHeight - this.$refs.fu.offsetHeight; //屏幕高度减去自身控件高度
  this.xPum < 0 && (this.xPum = 0);
  this.yPum < 0 && (this.yPum = 0);
  this.xPum > width && (this.xPum = width);
  this.yPum > height && (this.yPum = height);
  // if (this.xPum >= 0 && this.yPum >= 0 && this.xPum<= width &&this.yPum<= height) {
  this.$refs.fu.style.left = this.xPum + "px";
  this.$refs.fu.style.top = this.yPum + "px";
  // }
  //阻止页面的滑动默认事件
  document.addEventListener(
   "touchmove",
   function () {
   event.preventDefault();
   },
   false
  );
  }
 },
 //鼠标释放时候的函数
 end() {
  this.flags = false;
 },
 onClick() {
  //在这里我是作为子组件来使用的
  this.$emit("click");
 },
 },

4.style样式

<style scoped>
.callback p {
 font-size: 16px;
 color: #fff;
 background: rgba(56, 57, 58, 0.5);
 border-radius: 50%;
 text-align: center;
 width: 50px;
 height: 50px;
 line-height: 50px;
 font-family: PingFang SC;
 font-weight: 600;
 box-shadow: 0 0 10px #fff;
}
.callback img {
 display: block;
 width: 50px;
 height: 50px;
 box-shadow: 0 0 10px rgb(133, 129, 129);
 border-radius: 50%;
 background: #fff;
}
.callback {
 position: fixed;
 top: 40px;
 left: 20px;
 z-index: 99999;
}
.float {
 position: fixed;
 right: 20px;
 top: 60%;
 touch-action: none;
 text-align: center;
 width: 50px;
 height: 50px;
 border-radius: 24px;
 line-height: 48px;
 color: white;
}
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
vue-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
vue-router定义元信息meta操作
Dec 07 Vue.js
详解如何在vue+element-ui的项目中封装dialog组件
Dec 11 Vue.js
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
Vue实现手机号、验证码登录(60s禁用倒计时)
Dec 19 Vue.js
vue中activated的用法
Jan 03 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 Vue.js
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
vue 自定义组件添加原生事件
Apr 21 Vue.js
vue修饰符.capture和.self的区别
Apr 22 Vue.js
vue中axios封装使用的完整教程
Mar 03 #Vue.js
详解Vue.js 可拖放文本框组件的使用
Mar 03 #Vue.js
详解vue3中组件的非兼容变更
Mar 03 #Vue.js
vite2.0+vue3移动端项目实战详解
Mar 03 #Vue.js
Vue多选列表组件深入详解
Mar 02 #Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 #Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 #Vue.js
You might like
PHP实时显示输出
2008/10/02 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
ThinkPHP中的系统常量和预定义常量集合
2014/07/01 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
JS动态图片的实现方法完整示例
2020/01/13 Javascript
Python3中关于cookie的创建与保存
2018/10/21 Python
我就是这样学习Python中的列表
2019/06/02 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
python 伯努利分布详解
2020/02/25 Python
keras小技巧——获取某一个网络层的输出方式
2020/05/23 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
kmart凯马特官网:美国最大的打折零售商和全球最大的批发商之一
2016/11/17 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
责任心演讲稿
2014/05/14 职场文书