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插件Tabs实现过程
Jul 06 Javascript
一些实用的jQuery代码片段收集
Jul 12 Javascript
js使用递归解析xml
Dec 12 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
Dec 16 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
JavaScript观察者模式(经典)
Dec 09 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
用原生JS实现简单的多选框功能
Jun 12 Javascript
薪资那么高的Web前端必看书单
Oct 13 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
js实现图片3D轮播效果
Sep 21 Javascript
uni-app如何实现增量更新功能
Jan 03 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
提问的智慧(2)
2006/10/09 PHP
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
前端必学之PHP语法基础
2016/01/01 PHP
JavaScript 基础知识 被自己遗忘的
2009/10/15 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
解决Vue动态加载本地图片问题
2019/10/09 Javascript
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
Python环境变量设置方法
2016/08/28 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
python小白切忌乱用表达式
2020/05/29 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
测绘工程本科生求职信
2013/10/10 职场文书
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
岗位职责风险防控
2014/02/18 职场文书
优秀学生评语大全
2014/04/25 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
色戒观后感
2015/06/12 职场文书
2016关于军训的心得体会
2016/01/11 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
JavaScript实现简单的音乐播放器
2022/08/14 Javascript