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 相关文章推荐
extjs grid取到数据而不显示的解决
Dec 29 Javascript
给Function做的OOP扩展
May 07 Javascript
js 获取服务器控件值的代码
Mar 05 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
详解PHP中pathinfo()函数导致的安全问题
Jan 05 Javascript
AngularJS 文件上传控件 ng-file-upload详解
Jan 13 Javascript
JS正则表达式完美实现身份证校验功能
Oct 18 Javascript
ReactNative实现Toast的示例
Dec 31 Javascript
vue使用自定义icon图标的方法
May 14 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 Javascript
JavaScript日期工具类DateUtils定义与用法示例
Sep 03 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
javascript 设置某DIV区域内的checkbox复选框
2009/11/30 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
使用JS 插件qrcode.js生成二维码功能
2017/02/20 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
javascript实现画板功能
2020/04/12 Javascript
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Django admin美化插件suit使用示例
2017/12/12 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
Python之修改图片像素值的方法
2019/07/03 Python
Python字典底层实现原理详解
2019/12/18 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
css3利用transform变形结合事件完成扇形导航
2020/10/26 HTML / CSS
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
台湾旅游网站:灿星旅游
2018/10/11 全球购物
几道PHP的面试题
2012/05/19 面试题
解决方案设计综合面试题
2015/08/31 面试题
汽车工程专业应届生求职信
2013/10/19 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
消防演习感想
2015/08/10 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
Python中time与datetime模块使用方法详解
2022/03/31 Python