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 相关文章推荐
接收键盘指令的脚本
Jun 26 Javascript
javascript showModalDialog,open取得父窗口的方法
Mar 10 Javascript
JavaScript中的16进制字符(改进)
Nov 21 Javascript
JavaScript更改原始对象valueOf的方法
Mar 19 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
Nov 30 Javascript
AngularJS入门教程之静态模板详解
Aug 18 Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 Javascript
angularjs中$http异步上传Excel文件方法
Feb 23 Javascript
Koa项目搭建过程详细记录
Apr 12 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
微信小程序request请求封装,验签代码实例
Dec 04 Javascript
JS eval代码快速解密实例解析
Apr 23 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连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
js的event详解。
2006/09/06 Javascript
JavaScript事件列表解说
2006/12/22 Javascript
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
JS实现self的resend
2010/07/22 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
jQuery使用方法
2017/02/04 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
[02:43]DOTA2英雄基础教程 半人马战行者
2014/01/13 DOTA
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
python实现连接mongodb的方法
2015/05/08 Python
在django中使用自定义标签实现分页功能
2017/07/04 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python中kmeans聚类实现代码
2018/02/23 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
会计主管岗位职责范文
2013/11/08 职场文书
总经理秘书工作职责
2013/12/26 职场文书
小学安全教育材料
2014/02/17 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
单位工作证明格式模板
2014/10/04 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书