vue一步步实现alert功能


Posted in Javascript onJuly 05, 2017

原生alert的缺点

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

vue一步步实现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)

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

Javascript 相关文章推荐
超级兔子让浮动层消失的前因后果
Mar 09 Javascript
js 处理URL实用技巧
Nov 23 Javascript
使用jQuery validate 验证注册表单实例演示
Mar 25 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
Sep 17 Javascript
JS实现样式清新的横排下拉菜单效果
Oct 09 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
JavaScript 中的 this 简单规则
Sep 19 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
Oct 16 Javascript
Element Alert警告的具体使用方法
Jul 27 Javascript
jQuery实现移动端扭蛋机抽奖
Nov 08 jQuery
Map与WeakMap类型在JavaScript中的使用详解
Nov 18 Javascript
javascript this指向相关问题及改变方法
Nov 19 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 #Javascript
JS实现移动端按首字母检索城市列表附源码下载
Jul 05 #Javascript
webpack教程之webpack.config.js配置文件
Jul 05 #Javascript
webstorm添加vue.js支持的方法教程
Jul 05 #Javascript
vue.js实现刷新当前页面的方法教程
Jul 05 #Javascript
vue router2.0二级路由的简单使用
Jul 05 #Javascript
详解使用Node.js 将txt文件转为Excel文件
Jul 05 #Javascript
You might like
php include和require的区别深入解析
2013/06/17 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
一个无限级XML绑定跨框架菜单(For IE)
2007/01/27 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
详解AngularJS 模态对话框
2016/04/07 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
2016/06/21 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
详解如何运行vue项目
2019/04/15 Javascript
node-red File读取好保存实例讲解
2019/09/11 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
详解python实现线程安全的单例模式
2018/03/05 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
为什么说python适合写爬虫
2020/06/11 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
彪马美国官网:PUMA美国
2017/03/09 全球购物
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
初中科学教学反思
2014/01/21 职场文书
学校募捐倡议书
2014/05/14 职场文书
争做文明公民倡议书
2014/08/29 职场文书
努力学习保证书
2015/02/26 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
「睡美人」爱洛公主粘土人开订
2022/03/22 日漫