全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

vue一步步实现alert功能

原生alert的缺点

  1. 会阻塞一切操作,影响用户体验
  2. 很多浏览器会默认静止alert,例如微信。
  3. 原生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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue  # alert  # alert组件  # vue.js  # 使用Vue组件实现一个简单弹窗效果  # 很棒的vue弹窗组件  # 关于vue.js弹窗组件的知识点总结  # vue组件之Alert的实现代码  # vue.extend实现alert模态框弹窗组件  # 的是  # 是一个  # 自适应  # 不可以  # 有一定  # 就把  # 几种  # 可选  # 每次都  # 一个小小  # 绑定  # 回调  # 随时随地  # 能像  # 家去  # 大家多多  # 传送门  # 减少了  # 最外层  # 取消了 


相关文章: 如何在西部数码注册域名并快速搭建网站?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  ,想在网上投简历,哪几个网站比较好?  jQuery 常见小例汇总  广东企业建站网站优化与SEO营销核心策略指南  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  ,怎么用自己头像做动态表情包?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何高效利用亚马逊云主机搭建企业网站?  C#如何在一个XML文件中查找并替换文本内容  小型网站制作HTML,*游戏网站怎么搭建?  如何基于云服务器快速搭建网站及云盘系统?  c# 在高并发场景下,委托和接口调用的性能对比  东莞专业制作网站的公司,东莞大学生网的网址是什么?  已有域名如何免费搭建网站?  股票网站制作软件,网上股票怎么开户?  电商平台网站制作流程,电商网站如何制作?  如何在云主机上快速搭建多站点网站?  建站VPS能否同时实现高效与安全翻墙?  建站之星ASP如何实现CMS高效搭建与安全管理?  如何通过建站之星自助学习解决操作问题?  北京制作网站的公司,北京铁路集团官方网站?  如何用好域名打造高点击率的自主建站?  家具网站制作软件,家具厂怎么跑业务?  网站制作的步骤包括,正确网址格式怎么写?  如何通过商城免费建站系统源码自定义网站主题?  太原网站制作公司有哪些,网约车营运证查询官网?  深入理解Android中的xmlns:tools属性  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  北京的网站制作公司有哪些,哪个视频网站最好?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何快速配置高效服务器建站软件?  实现虚拟支付需哪些建站技术支撑?  如何通过万网虚拟主机快速搭建网站?  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何在香港服务器上快速搭建免备案网站?  宁波免费建站如何选择可靠模板与平台?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  如何用PHP工具快速搭建高效网站?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  完全自定义免费建站平台:主题模板在线生成一站式服务  高性能网站服务器配置指南:安全稳定与高效建站核心方案  在线教育网站制作平台,山西立德教育官网?  如何通过可视化优化提升建站效果?  建站主机选购指南:核心配置与性价比推荐解析  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。