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 相关文章推荐
Javascript创建自定义对象 创建Object实例添加属性和方法
Jun 04 Javascript
JavaScript中prototype为对象添加属性的误区介绍
Oct 15 Javascript
使用jQuery将多条数据插入模态框的实现代码
Oct 08 Javascript
js 实现数值的千分位及保存小数方法(推荐)
Aug 01 Javascript
jQuery实现可移动选项的左右下拉列表示例
Dec 26 Javascript
ES6下React组件的写法示例代码
May 04 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
jquery 一键复制到剪切板的实例
Sep 20 jQuery
vue.js整合mint-ui里的轮播图实例代码
Dec 27 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
Feb 08 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
Apr 04 Javascript
layui实现数据表格自定义数据项
Oct 26 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
日本十大惊悚动漫
2020/03/04 日漫
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
Whatever:hover 无需javascript让IE支持丰富伪类
2010/06/29 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
让 python 命令行也可以自动补全
2014/11/30 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
python实现桌面壁纸切换功能
2019/01/21 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
后进生转化工作制度
2014/01/17 职场文书
上班离岗检讨书
2014/01/27 职场文书
学校安全检查制度
2014/01/27 职场文书
党支部换届选举方案
2014/05/08 职场文书
单位工作证明
2014/10/07 职场文书
2015年党风廉政建设责任书
2015/01/29 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript