JSFiddle - React, Tailwind, and code Playground
by ZooeyLai
HTML
<div id="app" class="wrap">
<button onclick="toastSuccess()" class="btn btn-success">成功訂購商品</button>
<hr>
<button onclick="toastError()" class="btn btn-danger">訂購商品失敗</button>
<div class="toast toast-success">
訂購成功!可以查看 Email 確認訂單細節!
</div>
<div class="toast toast-error">
抱歉,訂購失敗!請稍後重新嘗試
</div>
</div>
SCSS
*{
box-sizing: border-box;
}
$primary: #2563eb;
$primary-100: #dbeafe;
$primary-800: #1e40af;
$success: #059669;
$success-100: #d1fae5;
$success-800: #065f46;
$danger: #e11d48;
$danger-100: #ffe4e6;
$danger-800: #9f1239;
$warning: #ea580c;
$warning-100: #ffedd5;
$warning-800: #9a3412;
$types: (
success: $success,
danger: $danger,
);
.wrap{
width: 600px;
margin: 80px auto;
position: relative;
}
.btn{
padding: 0.5rem 1rem;
font-size: 1rem;
border-radius: 0.25rem;
transition: all 0.3s;
cursor: pointer;
}
@each $name, $color in $types {
.btn-#{$name} {
background:$color;
color:#fff;
border: 1px solid $color;
&:hover{
background: darken($color, 8%);
}
}
}
.toast{
padding: 0.5rem;
border-radius: 0.25rem;
font-size: 0.875rem;
// display: none;
opacity: 0;
transition: opacity .3s;
position: fixed;
top: 30px;
right: 20px;
}
.toast-active{
display: block;
}
.toast-success{
background-color: $success-100;
color: $success;
}
.toast-error{
background-color: $danger-100;
color: $danger;
}
JavaScript
function toastSuccess(){
let successToast = document.querySelector('.toast-success');
successToast.classList.add('toast-active');
successToast.style.opacity = '1';
setTimeout(() => {
successToast.style.opacity = "0";
successToast.classList.remove('toast-active');
},5000)
}
function toastError(){
let successToast = document.querySelector('.toast-error');
successToast.classList.add('toast-active');
successToast.style.opacity = '1';
setTimeout(() => {
successToast.style.opacity = "0";
successToast.classList.remove('toast-active');
},5000)
}