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 相关文章推荐
vuex的数据渲染与修改浅析
Nov 26 Vue.js
vue3.0中setup使用(两种用法)
Dec 02 Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
vue实现购物车的小练习
Dec 21 Vue.js
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
基于vue+echarts数据可视化大屏展示的实现
Dec 25 Vue.js
vue实现登录功能
Dec 31 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
基于vue的video播放器的实现示例
Feb 19 Vue.js
vue里使用create, mounted调用方法
Apr 26 Vue.js
详解Vue3使用axios的配置教程
Apr 29 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生成UTF8文件的方法
2010/05/15 PHP
两款万能的php分页类
2015/11/12 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
js中将多个语句写成一个语句的两种方法小结
2007/12/08 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
python计算方程式根的方法
2015/05/07 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
python如何写try语句
2020/07/14 Python
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
什么是数组名
2012/05/10 面试题
儿科主治医生个人求职信
2013/09/23 职场文书
北京大学自荐信范文
2014/01/28 职场文书
司法局火灾防控方案
2014/06/05 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
年会邀请函范文
2015/01/30 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
听证通知书
2015/04/24 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技