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 相关文章推荐
jquery uaMatch源代码
Feb 14 Javascript
14个有用的Jquery技巧分享
Jan 08 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
jQuery实现平滑滚动的标签分栏切换效果
Aug 28 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
Apr 23 Javascript
基于javascript数组实现图片轮播
May 02 Javascript
纯js和css完成贪吃蛇小游戏demo
Sep 01 Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 Javascript
Vue.js 2.0学习教程之从基础到组件详解
Apr 24 Javascript
ES6数组的扩展详解
Apr 25 Javascript
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
nestjs返回给前端数据格式的封装实现
Feb 22 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中文字符截取防乱码
2008/03/28 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
详解PHP数组赋值方法
2015/11/07 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
ExtJS 入门
2010/10/29 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
js实现继承的5种方式
2015/12/01 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
easyui中combotree循环获取父节点至根节点并输出路径实现方法
2016/11/10 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
VUE项目初建和常见问题总结
2019/09/12 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
pandas的qcut()方法详解
2019/07/06 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
python 监控logcat关键字功能
2020/09/04 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
阿巴庭院:Abba Patio
2019/06/18 全球购物
运动会广播稿30字
2014/01/21 职场文书
就业意向书范文
2014/04/01 职场文书
政治学求职信
2014/06/03 职场文书
信息管理专业自荐书
2014/06/05 职场文书
体育教师求职信
2014/06/30 职场文书
纪律教育月活动总结
2014/08/26 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
大学生入党自传2015
2015/06/26 职场文书
课改心得体会范文
2016/01/25 职场文书