首页 > 其他分享 >vue-unsaved-changes-dialog 在桌面页面上,弹出窗会跟随鼠标显示

vue-unsaved-changes-dialog 在桌面页面上,弹出窗会跟随鼠标显示

时间:2023-09-14 11:44:35浏览次数:41  
标签:vue 样式 unsaved js dialog esm changes css

简介及使用教程

这是一个漂亮的未保存变更对话框,有以下特点:

  • 有保存、丢弃和取消三个按钮
  • 在桌面页面上,弹出窗会跟随鼠标显示
  • 显示隐藏动画流畅
  • 智能避免弹出在窗口边缘并且随窗口大小调整自动适应
  • 完全自适应:在移动设备上全屏显示
  • 键盘可导航可访问
  • 所有的文案都可以替换

1.png

2.png

更多优点:

  • 桌面和手机上都有非常平滑的动画
  • 对鼠标动作进行了节流处理,以避免性能问题(使用了lodash.throttle,额外占用2KB)
  • 组件被摧毁的同时所有的监听器也会停止工作
  • 暗色遮罩背景
  • 点击背景也能使对话框消失(如同取消按钮)
  • 桌面端、手机端、弹窗定位及所有的样式和动画打包后仅14KB
  • 没有依赖

responsive.gif

## 安装

npm i vue-unsaved-changes-dialog

使用

<button @click="attemptToGoBack">Back</button>;

<UnsavedChangesDialog
:title="Unsaved Changes"
:subtitle="['You have unsaved changes', 'Would you like to save or discard them?']"
 :show="shouldShowDialog"
 @cancel="closePopup"
 @discard="discard"
 @save="save"/>;

完整的用法:

import UnsavedChangesDialog from 'vue-unsaved-changes-dialog';

export default {
  name: 'App',
  data() {
    return {
      shouldShowDialog: false,
    }
  },
  methods: {
    attemptToGoBack() {
      this.hasUnsavedChanges ? 
        this.showPopup() :
        this.exit();
    },
    exit() {
      this.closePopup();
      // and leave the view
    },
    showPopup() {
      this.shouldShowDialog = true;
    },
    closePopup() {
      this.shouldShowDialog = false;
    },
    discard() {
      this.discardEdits();
      this.exit();
    },
    discardEdits() {
      // your code here
    },
    async save() {
      try {
        await this.saveChangesToServer();
        this.exit();
      } catch(e) {
        console.error(e);
      }
    },
    async saveChangesToServer() {
      // your code here
    }
  },
  computed: {
    hasUnsavedChanges() {
      // check for unsaved changes
    }
  },
  components: {
    UnsavedChangesDialog
  }
}

自定义

文本

可以通过Props设置标题和主体信息。

<UnsavedChangesDialog
  :title="Unsaved Changes"
  :subtitle="['You have unsaved changes', 'Would you like to save or discard them?']"
 />

 

subtitle 接受String和 Array 。如果提供Array,数组内所有元素都将用```

<p>```插入。

按钮文本及图标

可以通过slot接口自定义按钮,你可以在对话框的任何部分注入你自己的文本、图标、HTML文本等等。

<UnsavedChangesDialog
  :title="Unsaved Changes">
  <template name="title">Destory the things?</template>;
  <template name="body">Description</template>;
  <template name="cancel-button">❌</template>;
  <template name="discard-button">????</template>;
  <template name="save-button">✅</template>;
</UnsavedChangesDialog>

样式和动画

你可以使用无样式的打包文件no-css.esm.js,来使用自己的样式。 你也可以复制默认的样式文件no-css.esm.css到你的项目中来自定义样式。

打包说明

dist文件夹中有5个文件,.esm.js(标准ES6模块)、no-css.esm.js(不含样式的标准ES6模块)、no-css.esm.css(用于无样式ES6打包样式表)、.min.js(浏览器环境)、.ssr.js(用于SSR)。

标签:vue,样式,unsaved,js,dialog,esm,changes,css
From: https://www.cnblogs.com/Jishuyang/p/17702127.html

相关文章

  • vue项目打包编译后如何修改后台请求地址
    1、在public文件夹下新建config.js文件2、config.js文件中,编写配置地址代码 3、在index中引入js文件 4、使用config.js中的变量,vue页面,js页面都可以用window.setURL.publicBaseUrl ......
  • vue的model选项
    vue中的v-model指令实现了表单的双向绑定,官网例子:<inputtype="text"v-model="message"/><p>{{message}}</p>其实v-model只是语法糖,真正的实现形式:<inputtype="text":value="message"@input="message=$event.target.value&......
  • Vue二维码组件
    1.前言该组件依赖qrcode.js与element-ui支持二维码大小配置,点击大图预览该组件以vue文件形式进行封装,需要配置httpVueLoader插件进行引入,其他格式请自行更改源码2.使用方法引入依赖<linkhref="https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.13/theme-chalk/index......
  • vue2实现pc端自适应分辨率
    思路:使用lib-flexible结合postcss-pxtorem实现第一步在项目utils下建立flexible.js文件(直接下载则不用新建该文件)第二部复制以下代码到刚建好的文件中或者直接yarninstalllib-flexible-pc-y//基于libflexible用来适配pc端(function(win,lib){ vardoc=win.docu......
  • VueX写法对比
    原始写法<template><div><h1>当前求和为:{{sum}}</h1><selectv-model.number="n"><optionvalue="1">1</option><optionvalue="2">2</opti......
  • 【Vuejs】Date()常用方法
    Date()常用方法vardate=newDate()console.log(date);//FriOct29202114:18:13GMT+0800(中国标准时间)console.log(date.getMonth());//获取月份(0-11,0代表1月,所以在显示当前时间的时候需要date.getMonth()+1)console.log(date.getYear());......
  • vue实现tab标签选中
    tabs实现<template><div><divv-for="(item,index)intabs":key="index"class="coursespecialtyView-tabs-txt":class="{active:isActive(index)}"@click="changeTab(item......
  • 如何在Vue项目中引入avue进行开发?
    Avue的官网官网地址:​ ​https://avuejs.com/​安装3.1安装npmi@smallwei/avue-S$3.2在main.js中引入//引入importAvuefrom'@smallwei/avue';import'@smallwei/avue/lib/index.css';Vue.use(Avue)4使用4.1官方文档4.2实际应用<template><div&g......
  • Vue H5 Swiper 动画
    简介及使用教程VueH5Swiper是一个H5移动滑块组件,适用于H5应用程序,轻量。安装Npmnpmivue-h5-swiperYarnyarnaddvue-h5-swiper使用引入import{Swiper,SwiperItem}from'vue-h5-swiper';注册exportdefault{components:{Swiper,Swiper......
  • Vue 文本字幕组件(Marquee Text Component)
    简介及使用教程Vue文本字幕组件(MarqueeTextComponent)是一个Vue.js的字幕文本组件,具有CSSGPU动画、快速、功能强大等特点。安装Npmnpmivue-marquee-text-componentYarnyarnaddvue-marquee-text-component 使用全局注册importVuefrom'vue'importMa......