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+vant实现购物车全选和反选功能
Nov 17 Vue.js
解决vue页面刷新,数据丢失的问题
Nov 24 Vue.js
浅析VUE防抖与节流
Nov 24 Vue.js
vue $router和$route的区别详解
Dec 02 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
在vue项目中封装echarts的步骤
Dec 25 Vue.js
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
vue中 this.$set的使用详解
Nov 17 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 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抓取https的内容的代码
2010/04/06 PHP
有关php运算符的知识大全
2011/11/03 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
学习面向对象之面向对象的术语
2010/11/30 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
手动初始化Angular的模块与控制器
2016/12/26 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
详解vue v-model
2020/08/31 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
战略性融资合作协议书范本
2014/10/17 职场文书
2014年医务科工作总结
2014/12/18 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
唐山大地震观后感
2015/06/05 职场文书
股东出资协议书
2016/03/21 职场文书
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL