国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

vue一步步實(shí)現(xiàn)alert功能

2019-11-19 16:09:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

原生alert的缺點(diǎn)

  1. 會(huì)阻塞一切操作,影響用戶體驗(yàn)
  2. 很多瀏覽器會(huì)默認(rèn)靜止alert,例如微信。
  3. 原生alert框樣式丑陋。

項(xiàng)目地址: web-style 項(xiàng)目里有css樣式和vue組件。目標(biāo)是快速構(gòu)建后臺(tái)系統(tǒng)。有一定自適應(yīng)的設(shè)計(jì)。

css

思路:最外層是一個(gè)黑色透明撐滿全屏幕的div并且是fixed的div.modal-mask

在mask內(nèi)部是一個(gè)垂直居中的div框大小可以固定。垂直居中方法有幾種可選。我選用的是flex。關(guān)鍵性的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。 然后我們做了一個(gè)小小的自適應(yīng)。 在小屏上(屏幕寬度小于640px)取消了固定寬度。減少了padding的值,看起來(lái)更小巧。

開(kāi)發(fā)vue組件

vue template

首先我希望這個(gè)組件功能能像原生的alert事件一樣隨時(shí)隨地的方便調(diào)用。 不希望每次都new Vue({})一個(gè)實(shí)例。 所以我做了一些不一樣的設(shè)計(jì)。

<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默認(rèn)的模版標(biāo)記。

@click 是綁定click事件的指令

vue data

new Vue({  el: '#V-confirm',  data: {       show: false,       onCancel: false,       onOk: false,       title: '',       content: ''     }  })
  1. show 是控制顯示隱藏的標(biāo)記。
  2. onCancel onOk 是點(diǎn)擊取消或者確定時(shí)候觸發(fā)的回調(diào)。
  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 || '標(biāo)題'    this.content = setting.content || '內(nèi)容'    this.onOk = setting.onOk || false    this.onCancel = setting.onCancel || false    this.show = true    document.body.style.overflow = 'hidden'   }  } }
  1. alert(setting) 方法是控制顯示alert組件的方法。接受一個(gè)object的參數(shù)配置。
  2. op(type) 方法是點(diǎn)擊取消和確定按鈕的時(shí)候觸發(fā)的時(shí)候。

hack代碼

 var element = document.createElement('div'); element.id = 'V-confirm' element.innerHTML = template document.body.appendChild(element)

這一段代碼作用是一開(kāi)始就把vue實(shí)例插入到 body 底部,方便直接 alert 調(diào)用。

加入一些動(dòng)畫效果

依賴的是vue指令 transition 具體的用法教程 大家去過(guò)渡-傳送門

.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 = '刪除不可以恢復(fù)...'  setting.onOk = function(){}  setting.onCancel = function(){}    $confirm.alert(setting)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 湛江市| 霸州市| 定南县| 塔城市| 扶余县| 玉环县| 雷山县| 弋阳县| 望都县| 宿松县| 慈利县| 通江县| 赫章县| 韶山市| 祁连县| 贞丰县| 莱西市| 顺平县| 阿坝县| 宁晋县| 会东县| 庐江县| 平顶山市| 安义县| 巫溪县| 光泽县| 云南省| 临沂市| 凤凰县| 武陟县| 江门市| 突泉县| 铁力市| 正定县| 汕尾市| 大宁县| 聊城市| 无锡市| 怀来县| 大宁县| 五家渠市|