vue一步步实现alert功能

原生alert的缺点

  1. 会阻塞一切操作,影响用户体验
  2. 很多浏览器会默认静止alert,例如微信。
  3. 原生alert框样式丑陋。

项目地址: web-style项目里有css样式和vue组件。目标是快速构建后台系统。有一定自适应的设计。

css

思路:最外层是一个黑色透明撑满全屏幕的div并且是fixed的div.modal-mask

在mask内部是一个垂直居中的div框大小可以固定。垂直居中方法有几种可选。我选用的是flex。关键性的css代码如下

.modal-mask{
 position: fixed;
 top: 0;
 left: 0;
 right: 0;
 bottom: 0;
 background-color: rgba(55,55,55,.6);
 z-index: 100;
 display: flex;
 align-items: center;
 justify-content: center;
}
.modal-confirm{
 width: 400px;
 box-sizing: border-box;
 padding: 30px 40px;
 background-color: #fff;
 border-radius: 6px;
}
@media only screen and (max-width: 640px) {
 .modal-confirm{
  width: 100%;
  margin: 0 20px;
  padding: 10px 20px;
 }
}

其中modal-confirm是alert框,有固定的宽度400px 还有padding。 然后我们做了一个小小的自适应。 在小屏上(屏幕宽度小于640px)取消了固定宽度。减少了padding的值,看起来更小巧。

开发vue组件

vue template

首先我希望这个组件功能能像原生的alert事件一样随时随地的方便调用。 不希望每次都new Vue({})一个实例。 所以我做了一些不一样的设计。

<div class="modal-mask" v-show="show">
    <div class="modal-confirm">
      <h2 class="confirm-header">
        <i class="iconfont icon-questioncircle"></i> {{ title }}
      </h2>
      <div class="confirm-content">
        {{ content }}
      </div>
      <div class="confirm-btns">
        <button class="btn" @click="op(1)">取 消</button>
        <button class="btn btn-primary" @click="op(2)">确 定</button>
      </div>
    </div>
  </div>

v-show是控制alert组件的显示和隐藏的指令。 {{ }}是vue默认的模版标记。

@click 是绑定click事件的指令

vue data

new Vue({
  el: '#V-confirm',
  data: {
       show: false,
       onCancel: false,
       onOk: false,
       title: '',
       content: ''
     }
  })
  1. show 是控制显示隐藏的标记。
  2. onCancel onOk 是点击取消或者确定时候触发的回调。
  3. title content 是alert显示的文本。

vue methods

 methods: {
   op(type){
    this.show = false
    if(type == '1'){
     if(this.onCancel) this.onCancel()
    }else{
     if(this.onOk) this.onOk()
    }

    this.onCancel = false
    this.onOk = false

    document.body.style.overflow = ''
   },
   alert(setting){
    this.title = setting.title || '标题'
    this.content = setting.content || '内容'
    this.onOk = setting.onOk || false
    this.onCancel = setting.onCancel || false
    this.show = true
    document.body.style.overflow = 'hidden'
   }
  }
 }
  1. alert(setting) 方法是控制显示alert组件的方法。接受一个object的参数配置。
  2. op(type) 方法是点击取消和确定按钮的时候触发的时候。

hack代码

 var element = document.createElement('div');
 element.id = 'V-confirm'
 element.innerHTML = template
 document.body.appendChild(element)

这一段代码作用是一开始就把vue实例插入到 body 底部,方便直接 alert 调用。

加入一些动画效果

依赖的是vue指令 transition 具体的用法教程 大家去过渡-传送门

.modal-enter, .modal-leave {
 opacity: 0;
}
.modal-transition{
 transition: all .3s ease;
}

.modal-enter .modal-confirm,
.modal-leave .modal-confirm {
 transform: scale(1.1);
}
.modal-transition{
 transition: all .3s ease;
}

用法

var setting = {}
  setting.title = '你确定删除吗?'
  setting.content = '删除不可以恢复...'
  setting.onOk = function(){}
  setting.onCancel = function(){}

$confirm.alert(setting)

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

(0)

相关推荐

  • vue组件之Alert的实现代码

    前言 本文主要Alert 组件的大致框架, 提供少量可配置选项. 旨在大致提供思路 Alert 用于页面中展示重要的提示信息. templat模板结构 <template> <div v-show="visible" class="Alert"> <i v-show="closable" class="iconhandle close" @click="close">&

  • vue一步步实现alert功能

    原生alert的缺点 会阻塞一切操作,影响用户体验 很多浏览器会默认静止alert,例如微信. 原生alert框样式丑陋. 项目地址: web-style项目里有css样式和vue组件.目标是快速构建后台系统.有一定自适应的设计. css 思路:最外层是一个黑色透明撑满全屏幕的div并且是fixed的div.modal-mask. 在mask内部是一个垂直居中的div框大小可以固定.垂直居中方法有几种可选.我选用的是flex.关键性的css代码如下 .modal-mask{ position:

  • 使用Bootrap和Vue实现仿百度搜索功能

    用Vue调用百度的搜索接口,实现简单的搜索功能. 搜索框的样式是基于Bootstrap,当然对样式做了简单的调整, 使之类似于百度搜索.代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>百度搜索</title> <style type="text/css"> .gray{ background-color

  • Vue自定义指令拖拽功能示例

    下面给大家分享vue自定义指令拖拽功能代码,具体代码如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>实例方法</title> <meta name="viewport" content="width=device-width, initial-scale=1

  • vue实现节点增删改功能

    本文实例为大家分享了vue实现节点增删改功能的具体代码,供大家参考,具体内容如下 效果: 增删改功能 tree.vue组件代码: <template> <div> <div class="all-div" v-if="model.name"> <div class="itemRow" :style="{ marginLeft:model.level*20+'px' }"> <

  • Vue实现table上下移动功能示例

    本文实例讲述了Vue实现table上下移动功能.分享给大家供大家参考,具体如下: 结合Element组件,scope中有三个参数(row,cow,$index)分别表示行内容.列内容.以及此行索引值, table上绑定数组 :data="tableList" <el-table :data="tableList"> </el-table> 添加一列,里面放上上移和下调两个按钮,并绑定上函数,将此行的索引值(scope.$index)作为参数,

  • vue+flask实现视频合成功能(拖拽上传)

    vue+flask实现视频合成 效果如下 拖拽上传我们之前一个文章有写过 //www.jb51.net/article/206543.htm 原理就是 监听drop事件 来获取拖拽的文件列表 上传文件 通过axios 上传文件 this,.fileList就是我们的文件列表 let files = this.fileList; let formd = new FormData(); let i = 1; //添加上传列表 files.forEach(item => { formd.append(

  • 详解vue实现坐标拾取器功能示例

    需求 1.搜索具体地址,自动填写经纬度,并在地图上标记 2.点击地图上一点,可重新填写经纬度并且标记 代码 在dom新建div渲染地图 <el-form-item label="店铺地址" prop="address"> <el-input v-model="fristForm.address"></el-input> <el-input class="long-lat" v-mode

  • 使用vue实现手写签名功能

     个人实现截图: 安装: npm install vue-esign --save 使用: 1.在main.js中引入 import vueEsign from 'vue-esign' Vue.use(vueEsign) 2.在页面中引用 <vue-esign ref="esign" :width="800" :height="300" :isCrop="isCrop" :lineWidth="lineWidt

  • vue项目中的支付功能实现(微信支付和支付宝支付)

    目录 项目中常见的支付方式 支付宝支付 微信支付 项目中常见的支付方式 支付宝支付 微信支付 余额支付(也需要支付宝或微信充值) 注意:本文仅从前端角度展开讲解 支付宝支付 项目难点: 页面是h5网页,用支付宝支付必须得到支付宝授权,调用支付宝的api. (如何授权请参照:调用支付宝api) 支付宝支付的一般过程是: 调用订单接口,获得订单号,支付金额等.    传递订单号,金额 至预支付接口    后台会返回来一个form,然后提交form自动跳转到支付宝支付页面 支付过程: 下图为为接口文档

  • Vue自定义复制指令 v-copy功能的实现

    使用自定义指令创建一个点击复制文本功能 1. 创建v-copy.js文件 import Vue from "vue"; // 注册一个全局自定义复制指令 `v-copy` Vue.directive("copy", { bind(el, { value }) { el.$value = value; el.handler = () => { el.style.position = 'relative'; if (!el.$value) { // 值为空的时候,

随机推荐