Vue3實(shí)現(xiàn) 餓了嗎 筆記1——alert.vue

前言

之前看了基于vue2攻谁、scss躏嚎、vuex逼泣、webpack等實(shí)現(xiàn)的餓了嗎代碼(https://github.com/bailicangdu/vue2-elm)谤专,想用vue3堡牡、scss、pinia复局、vite復(fù)現(xiàn)一遍冲簿。

vite創(chuàng)建vue3項(xiàng)目

找到要?jiǎng)?chuàng)建項(xiàng)目的文件夾,進(jìn)入dos界面亿昏,然后按以下步驟創(chuàng)建vue3項(xiàng)目峦剔。


image.png

打開(kāi)項(xiàng)目,在Terminal輸入命令安裝scss

npm install sass

提示框 alert.vue

首先編寫(xiě)公共部分的提示框角钩。


image.png

template

首先是alert.vue的結(jié)構(gòu)

<template>
  <div class="alert_container"> // 提示框的容器吝沫,占滿整個(gè)屏幕
    <section class="tip_text_container">
      <div class="tip_icon"> // 提示圖標(biāo),用css畫(huà)的圓圈和感嘆號(hào)
        <span></span>
        <span></span>
      </div>
      <p class="tip_text">{{alertText}}</p> // 具體提示內(nèi)容递礼,從父組件得到
      <div class="confirm" @click="closeTip">確認(rèn)</div> //點(diǎn)擊事件:子組件向父組件傳遞關(guān)閉提示框事件
    </section>
  </div>
</template>

js

主要是獲取父組件傳遞的提示信息alertText和向父組件傳遞關(guān)閉信息的點(diǎn)擊事件

<script>
export default {
  data:() => ({}),
  props:['alertText'],
  methods:{
    closeTip(){
      // 子組件向父組件傳遞關(guān)閉提示框事件
      this.$emit('closeTip')
    }
  }
}
</script>

css

項(xiàng)目需要編寫(xiě)一些公共css惨险,所以用到了mixin。

mixin 提供了一種非常靈活的方式脊髓,來(lái)分發(fā) Vue 組件中的可復(fù)用功能辫愉。一個(gè) mixin 對(duì)象可以包含任意組件選項(xiàng)。 當(dāng)組件使用 mixin 對(duì)象時(shí)将硝,所有 mixin 對(duì)象的選項(xiàng)將被“混合”進(jìn)入該組件本身的選項(xiàng)一屋。
https://blog.csdn.net/weixin_42709536/article/details/124859793

mixin.scss

$blue: #3190e8;
$bc: #e4e4e4;
$fc:#fff;

// 背景圖片地址和大小
@mixin bis($url) {
    background-image: url($url);
    background-repeat: no-repeat;
    background-size: 100% 100%;
}

@mixin borderRadius($radius) {
    -webkit-border-radius: $radius;
    -moz-border-radius: $radius;
    -ms-border-radius: $radius;
    -o-border-radius: $radius;
    border-radius: $radius;
}
//定位全屏
@mixin allcover{
    position:absolute;
    top:0;
    right:0;
}

//定位上下左右居中
@mixin center {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

//定位上下居中
@mixin ct {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
}

//定位左右居中
@mixin cl {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
}

//寬高
@mixin wh($width, $height){
    width: $width;
    height: $height;
}

//字體大小、行高袋哼、字體
@mixin font($size, $line-height, $family: 'Microsoft YaHei') {
    font: #{$size}/#{$line-height} $family;
}

//字體大小冀墨,顏色
@mixin sc($size, $color){
    font-size: $size;
    color: $color;
}

//flex 布局和 子元素 對(duì)其方式
@mixin fj($type: space-between){
    display: flex;
    justify-content: $type;

}

alertTip.vue的css

<style lang="scss" scoped>
  @import "../../style/mixin";  // 記得引用mixin.scss
  // 提示框出現(xiàn)的動(dòng)畫(huà)
  @keyframes tipMove {
    0% {transform: scale(1)}
    35% {transform: scale(.8)}
    70% {transform: scale(1.1)}
    100% {transform: scale(1)}
  }
  // 提示框占滿整個(gè)屏幕
  .alert_container{
    position: fixed;  // 固定定位:https://blog.csdn.net/qq_47373340/article/details/124063680
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 200;  // 設(shè)置元素堆疊:https://blog.csdn.net/weixin_45092437/article/details/126493240
    background-color: rgba(0, 0, 0, 0.1); // 原項(xiàng)目提示框背景沒(méi)有顏色,太丑了
  }
  .tip_text_container{
    position: absolute;
    top: 50%;
    left: 50%;
    // alertTip的瞄點(diǎn)在提示框的左上角
    margin-top: -6rem;  // rem:https://blog.csdn.net/qq_48613863/article/details/124060996
    margin-left: -6rem;
    width: 12rem;
    animation: tipMove .4s;
    background-color: rgba(255,255,255,1);
    padding-top: .6rem;
    display: flex;  // flex:https://blog.csdn.net/weixin_41044151/article/details/114071215
    // justify-content和align-items:https://blog.csdn.net/include_IT_dog/article/details/100065515
    justify-content: center;
    align-items: center;
    flex-direction: column;
    border-radius: 0.25rem;
    // 繪制icon的外圈
    .tip_icon{
      @include wh(3rem,3rem);
      border: 0.15rem solid #f8cb86;
      border-radius: 50%;
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
      // 繪制感嘆號(hào)
      // nth-of-type:https://blog.csdn.net/weixin_44051815/article/details/122214807
      span:nth-of-type(1){
        @include wh(.12rem,1.5rem);
        background-color: #f8cb86;
      }
      span:nth-of-type(2){
        @include wh(.2rem, .2rem);
        border: 1px;
        border-radius: 50%;
        margin-top: .2rem;
        background-color: #f8cb86;
      }
    }
    .tip_text{
      @include sc(.7rem, #333);
      line-height: .9rem;
      text-align: center;
      margin-top: .8rem;
      padding: 0 .4rem;
    }
    .confirm{
      @include sc(.8rem, #fff);
      font-weight: bold;
      margin-top: .8rem;
      background-color: #4cd964;
      width: 100%;
      text-align: center;
      line-height: 1.8rem;
      border: 1px;
      border-bottom-left-radius: .25rem;
      border-bottom-right-radius: .25rem;
    }
  }
</style>

觸發(fā)alertTip.vue

項(xiàng)目沒(méi)完成涛贯,我是在初始的App.vue觸發(fā)的alertTip.vue诽嘉。

js

<script>
  import HelloWorld from './components/HelloWorld.vue';
  import AlertTip from "./components/common/alertTip.vue"; // 導(dǎo)入alertTip.vue
  export default {
    data:()=> ({
      showAlert:false, // 是否顯示提示框
      alertText:"測(cè)試" // 向提示框傳遞的提示信息
    }),
    components: {AlertTip}, // 導(dǎo)入子組件記得寫(xiě)components
    methods:{
      closeTip(){  // 關(guān)閉提示框
        this.showAlert = false
      }
    }
  }
</script>

template

<template>
  <button @click="showAlert=true">提示框</button>
  <alert-tip v-if="showAlert" @closeTip="closeTip" :alertText="alertText"></alert-tip>
</template>

效果

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市弟翘,隨后出現(xiàn)的幾起案子虫腋,更是在濱河造成了極大的恐慌,老刑警劉巖稀余,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悦冀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡睛琳,警方通過(guò)查閱死者的電腦和手機(jī)盒蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)踏烙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人历等,你說(shuō)我怎么就攤上這事讨惩。” “怎么了寒屯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵荐捻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我寡夹,道長(zhǎng)处面,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任菩掏,我火速辦了婚禮魂角,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘患蹂。我一直安慰自己,他們只是感情好砸紊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布传于。 她就那樣靜靜地躺著,像睡著了一般醉顽。 火紅的嫁衣襯著肌膚如雪沼溜。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天游添,我揣著相機(jī)與錄音系草,去河邊找鬼。 笑死唆涝,一個(gè)胖子當(dāng)著我的面吹牛找都,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播廊酣,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼能耻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了亡驰?” 一聲冷哼從身側(cè)響起晓猛,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凡辱,沒(méi)想到半個(gè)月后戒职,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡透乾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年洪燥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磕秤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚓曼,死狀恐怖亲澡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纫版,我是刑警寧澤床绪,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站其弊,受9級(jí)特大地震影響癞己,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梭伐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一痹雅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糊识,春花似錦绩社、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拌滋,卻和暖如春朴沿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背败砂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工赌渣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昌犹。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓坚芜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親斜姥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子货岭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容