Vue2实现页面表单悬浮按钮

效果:

实现步骤:

 (1)在需要添加的表单页面里定义悬浮按钮

这段代码需要放到<template> </template>标签的form表单里面

// HTML代码
<div ref="dragArea" class="drag-area">
      <el-tooltip effect="dark" content="返回" placement="top">
        <el-button size="mini" icon="el-icon-back" circle @click="floatButton"></el-button>
      </el-tooltip>
    </div>

(2)定义JS代码

这段代码可以放到mounted(){}里面或者created(){}

// JS代码
  mounted() {
    /**
   * 监听悬浮拖拽区域
   */
    this.$nextTick(() => {
      // 获取DOM元素
      let dragArea = this.$refs.dragArea;
      // 缓存 clientX clientY 的对象: 用于判断是点击事件还是移动事件
      let clientOffset = {};
      // 绑定鼠标按下事件
      dragArea.addEventListener("mousedown", (event) => {
        let offsetX = dragArea.getBoundingClientRect().left; // 获取当前的x轴距离
        let offsetY = dragArea.getBoundingClientRect().top; // 获取当前的y轴距离
        let innerX = event.clientX - offsetX; // 获取鼠标在方块内的x轴距
        let innerY = event.clientY - offsetY; // 获取鼠标在方块内的y轴距
        console.log(offsetX, offsetY, innerX, innerY);
        // 缓存 clientX clientY
        clientOffset.clientX = event.clientX;
        clientOffset.clientY = event.clientY;
        // 鼠标移动的时候不停的修改div的left和top值
        document.onmousemove = function (event) {
          dragArea.style.left = event.clientX - innerX + "px";
          dragArea.style.top = event.clientY - innerY + "px";
          // dragArea 距离顶部的距离
          let dragAreaTop = window.innerHeight - dragArea.getBoundingClientRect().height;
          // dragArea 距离左部的距离
          let dragAreaLeft = window.innerWidth - dragArea.getBoundingClientRect().width;
          // 边界判断处理
          // 1、设置左右不能动
          // dragArea.style.left = dragAreaLeft + "px";

          // 1.设置左侧边界
          if (dragArea.getBoundingClientRect().left <= 0) {
            dragArea.style.left = "0px";
          }
          // 2.设置右侧边界
          if (dragArea.getBoundingClientRect().left >= dragAreaLeft) {
            dragArea.style.left = dragAreaLeft + "px";
          }
          // 3、设置顶部边界
          if (dragArea.getBoundingClientRect().top <= 0) {
            dragArea.style.top = "0px";
          }
          // 4、设置底部边界
          if (dragArea.getBoundingClientRect().top >= dragAreaTop) {
            dragArea.style.top = dragAreaTop + "px";
          }
        };
        // 鼠标抬起时,清除绑定在文档上的mousemove和mouseup事件;否则鼠标抬起后还可以继续拖拽方块
        document.onmouseup = function () {
          document.onmousemove = null;
          document.onmouseup = null;
        };
      }, false);
      // 绑定鼠标松开事件
      dragArea.addEventListener('mouseup', (event) => {
        let clientX = event.clientX;
        let clientY = event.clientY;
        if (clientX === clientOffset.clientX && clientY === clientOffset.clientY) {
          console.log('click 事件');
        } else {
          console.log('drag 事件');
        }
      })
    });
  },

(3)定义悬浮按钮样式

这个样式基本满足所有电脑显示需求

// css代码
<style scoped lang="scss">
.drag-area {
  position: fixed;
  right: 400px;
  top: 50%;
  z-index: 99999;
  padding: 13px;
  width: fit-content;
  opacity: 1;
  background-color: rgba(255, 255, 255, 0.1);
  border-radius: 8px;
  box-shadow: 0px 2px 15px 0px rgba(9, 41, 77, 0.15);
  cursor: move;
  user-select: none;
  text-align: center;
}
<style>

属性解释

  • position: fixed;

    • 将元素固定在窗口的指定位置,滚动页面时不会移动。
  • right: 20px;

    • 将元素固定在离窗口右侧 20 像素的位置。
  • top: 20%;

    • 将元素固定在离窗口顶部 20% 的位置。
  • z-index: 99999;

    • 设置元素的堆叠顺序,值越大越靠上,确保元素在最上层显示。
  • padding: 13px;

    • 设置元素的内边距,四周均为 13 像素。
  • width: fit-content;

    • 设置元素的宽度为其内容所需的宽度。
  • opacity: 1;

    • 设置元素的不透明度为 1(完全不透明)。
  • background-color: rgba(255, 255, 255, 0.1);

    • 设置背景颜色为白色,且透明度为 0.1。
  • border-radius: 8px;

    • 设置元素的边框圆角为 8 像素。
  • box-shadow: 0px 2px 15px 0px rgba(9, 41, 77, 0.15);

    • 设置元素的阴影效果,阴影偏移为 (0px, 2px),模糊半径为 15 像素,颜色为 rgba(9, 41, 77, 0.15)。
  • cursor: move;

    • 设置鼠标悬停在元素上时显示为移动指针(通常用于拖动)。
  • user-select: none;

    • 禁止用户选择元素中的文本。
  • text-align: center;

    • 设置元素中的文本居中对齐。

      (4)定义方法
      methods:{
      
      floatButton() {
      
      //这里写点击按钮后你想要实现的功能
      
      }
      
      }

### 回答1: 在Vue2中,可以通过`<router-link>`组件来实现按钮跳转页面。 首先,需要安装并配置Vue Router。在安装和配置完成后,即可在Vue组件中使用`<router-link>`组件来实现页面跳转。 下面是一个简单的示例: ```html <template> <div> <h1>Home Page</h1> <router-link to="/about"> <button>About Page</button> </router-link> </div> </template> ``` 在上面的示例中,我们通过`<router-link>`组件来实现了一个跳转到`/about`页面按钮。`to`属性指定了要跳转的页面路径。 当用户点击按钮时,路由会自动导航到指定的页面。 ### 回答2: 使用Vue2实现按钮跳转页面有以下几个步骤: 1. 在Vue的HTML模板中创建一个按钮元素,使用`v-on:click`指令绑定一个点击事件。 ```html <button v-on:click="redirectToPage">跳转页面</button> ``` 2. 在Vue的Script部分,定义一个`methods`对象,并在其中定义`redirectToPage`方法,该方法用于按钮点击事件的处理。 ```javascript <script> export default { methods: { redirectToPage() { // 在这里实现按钮跳转逻辑 } } } </script> ``` 3. 使用Vue的编程式导航,使用`$router.push`方法进行页面跳转。 ```javascript <script> import { router } from '@/router'; export default { methods: { redirectToPage() { this.$router.push('/target-page'); // 跳转到目标页面的路径 } } } </script> ``` 4. 在Vue的路由配置中,设置目标页面的路径与组件的对应关系。 ```javascript import Vue from 'vue'; import Router from 'vue-router'; import TargetPage from '@/components/TargetPage'; Vue.use(Router); export const router = new Router({ routes: [ { path: '/target-page', name: 'TargetPage', component: TargetPage } ] }); ``` 通过以上方法,当按钮被点击时,Vue会调用`redirectToPage`方法,通过编程式导航将页面跳转到目标页面。 ### 回答3: 在Vue2中实现按钮跳转页面,可以采用以下步骤: 1. 首先,在Vue组件的template中添加一个按钮元素,例如: ``` <template> <button @click="goToPage">点击跳转页面</button> </template> ``` 2. 在Vue组件的script标签中,定义一个方法来处理按钮的点击事件,例如: ``` <script> export default { methods: { goToPage() { // 在这里进行页面跳转的逻辑处理 } } } </script> ``` 3. 在goToPage方法中,使用Vue的路由功能来实现页面的跳转,首先需要在main.js中配置路由: ``` import Vue from 'vue' import VueRouter from 'vue-router' import Page from '@/views/Page.vue' Vue.use(VueRouter) const routes = [ { path: '/page', name: 'Page', component: Page }, // 其他路由配置... ] const router = new VueRouter({ mode: 'history', routes }) export default router ``` 4. 然后,在goToPage方法中,使用this.$router.push方法来进行跳转,例如: ``` goToPage() { this.$router.push('/page') } ``` 这样就可以通过点击按钮实现跳转到名为Page的页面。需要注意的是,在实际使用中,需要根据项目的实际情况来配置路由和页面组件,并在需要跳转的页面组件中进行相应的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值