Files
ai_dianshang/web/toast-demo.html
2025-11-28 15:18:10 +08:00

348 lines
11 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Toast 消息提醒组件演示</title>
<link rel="stylesheet" href="assets/css/reset.css">
<link rel="stylesheet" href="assets/css/toast.css">
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 20px;
}
.demo-container {
background: white;
border-radius: 20px;
padding: 40px;
max-width: 800px;
width: 100%;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}
h1 {
font-size: 32px;
font-weight: 700;
margin-bottom: 10px;
color: #1a1a1a;
text-align: center;
}
.subtitle {
text-align: center;
color: #666;
margin-bottom: 40px;
font-size: 16px;
}
.demo-section {
margin-bottom: 30px;
}
.demo-section h2 {
font-size: 20px;
font-weight: 600;
margin-bottom: 15px;
color: #333;
}
.button-group {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 12px;
}
.demo-btn {
padding: 12px 24px;
border: none;
border-radius: 10px;
font-size: 15px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
color: white;
}
.demo-btn:active {
transform: scale(0.95);
}
.btn-success {
background: linear-gradient(135deg, #34C759, #28a745);
}
.btn-error {
background: linear-gradient(135deg, #FF3B30, #dc3545);
}
.btn-warning {
background: linear-gradient(135deg, #FF9500, #f39c12);
}
.btn-info {
background: linear-gradient(135deg, #007AFF, #0056b3);
}
.btn-confirm {
background: linear-gradient(135deg, #667eea, #764ba2);
}
.demo-btn:hover {
opacity: 0.9;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.code-block {
background: #f5f5f7;
border-radius: 8px;
padding: 15px;
margin-top: 10px;
font-family: 'Monaco', 'Menlo', monospace;
font-size: 13px;
color: #333;
overflow-x: auto;
}
@media (max-width: 768px) {
.demo-container {
padding: 30px 20px;
}
h1 {
font-size: 24px;
}
.button-group {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="demo-container">
<h1>🎨 Toast 消息提醒组件</h1>
<p class="subtitle">iOS风格的优雅消息提示</p>
<div class="demo-section">
<h2>基础消息类型</h2>
<div class="button-group">
<button class="demo-btn btn-success" onclick="Toast.success('操作成功!')">
✓ 成功消息
</button>
<button class="demo-btn btn-error" onclick="Toast.error('操作失败,请重试')">
✕ 错误消息
</button>
<button class="demo-btn btn-warning" onclick="Toast.warning('请注意检查信息')">
! 警告消息
</button>
<button class="demo-btn btn-info" onclick="Toast.info('这是一条提示消息')">
i 提示消息
</button>
</div>
<div class="code-block">
Toast.success('操作成功!');
Toast.error('操作失败,请重试');
Toast.warning('请注意检查信息');
Toast.info('这是一条提示消息');
</div>
</div>
<div class="demo-section">
<h2>自定义显示时长</h2>
<div class="button-group">
<button class="demo-btn btn-info" onclick="Toast.info('1秒后消失', { duration: 1000 })">
1秒消失
</button>
<button class="demo-btn btn-info" onclick="Toast.info('5秒后消失', { duration: 5000 })">
5秒消失
</button>
</div>
<div class="code-block">
Toast.info('1秒后消失', { duration: 1000 });
Toast.info('5秒后消失', { duration: 5000 });
</div>
</div>
<div class="demo-section">
<h2>不同位置显示</h2>
<div class="button-group">
<button class="demo-btn btn-info" onclick="Toast.info('顶部居中', { position: 'top-center' })">
顶部居中
</button>
<button class="demo-btn btn-info" onclick="Toast.info('顶部右侧', { position: 'top-right' })">
顶部右侧
</button>
<button class="demo-btn btn-info" onclick="Toast.info('底部居中', { position: 'bottom-center' })">
底部居中
</button>
<button class="demo-btn btn-info" onclick="Toast.info('屏幕中心', { position: 'center' })">
屏幕中心
</button>
</div>
<div class="code-block">
Toast.info('顶部居中', { position: 'top-center' });
Toast.info('顶部右侧', { position: 'top-right' });
Toast.info('底部居中', { position: 'bottom-center' });
Toast.info('屏幕中心', { position: 'center' });
</div>
</div>
<div class="demo-section">
<h2>确认对话框</h2>
<div class="button-group">
<button class="demo-btn btn-confirm" onclick="showConfirmDialog()">
显示确认对话框
</button>
<button class="demo-btn btn-confirm" onclick="showCustomDialog()">
自定义对话框
</button>
</div>
<div class="code-block">
Toast.confirm({
title: '确认删除',
message: '删除后无法恢复,确定要删除吗?',
confirmText: '删除',
cancelText: '取消'
}).then(confirmed => {
if (confirmed) {
Toast.success('已删除');
}
});
</div>
</div>
<div class="demo-section">
<h2>输入对话框</h2>
<div class="button-group">
<button class="demo-btn btn-info" onclick="showInputDialog()">
输入用户名
</button>
<button class="demo-btn btn-info" onclick="showEmailDialog()">
输入邮箱
</button>
<button class="demo-btn btn-info" onclick="showPhoneDialog()">
输入手机号
</button>
</div>
<div class="code-block">
Toast.prompt({
title: '设置用户名',
placeholder: '请输入用户名',
defaultValue: '张三',
maxLength: 20
}).then(value => {
if (value !== null) {
Toast.success(`用户名已设置为:${value}`);
}
});
</div>
</div>
<div class="demo-section">
<h2>长文本消息</h2>
<div class="button-group">
<button class="demo-btn btn-info" onclick="Toast.info('这是一条很长很长的消息用来测试当消息内容比较多的时候Toast组件的显示效果如何。')">
显示长文本
</button>
</div>
</div>
</div>
<script src="assets/js/toast.js"></script>
<script>
function showConfirmDialog() {
Toast.confirm({
title: '确认删除',
message: '删除后无法恢复,确定要删除吗?',
confirmText: '删除',
cancelText: '取消'
}).then(confirmed => {
if (confirmed) {
Toast.success('已删除');
} else {
Toast.info('已取消');
}
});
}
function showCustomDialog() {
Toast.confirm({
title: '退出登录',
message: '确定要退出当前账号吗?',
confirmText: '确定',
cancelText: '取消',
confirmColor: '#FF3B30',
cancelColor: '#007AFF'
}).then(confirmed => {
if (confirmed) {
Toast.success('已退出登录', { duration: 1500 });
}
});
}
function showInputDialog() {
Toast.prompt({
title: '设置用户名',
placeholder: '请输入用户名',
defaultValue: '',
maxLength: 20
}).then(value => {
if (value !== null && value.trim() !== '') {
Toast.success(`用户名已设置为:${value}`);
} else if (value !== null) {
Toast.warning('用户名不能为空');
}
});
}
function showEmailDialog() {
Toast.prompt({
title: '设置邮箱',
placeholder: '请输入邮箱地址',
defaultValue: '',
inputType: 'email'
}).then(value => {
if (value !== null && value.trim() !== '') {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (emailRegex.test(value)) {
Toast.success(`邮箱已设置为:${value}`);
} else {
Toast.error('请输入有效的邮箱地址');
}
} else if (value !== null) {
Toast.warning('邮箱不能为空');
}
});
}
function showPhoneDialog() {
Toast.prompt({
title: '设置手机号',
placeholder: '请输入11位手机号',
defaultValue: '',
inputType: 'tel',
maxLength: 11
}).then(value => {
if (value !== null && value.trim() !== '') {
const phoneRegex = /^1[3-9]\d{9}$/;
if (phoneRegex.test(value)) {
Toast.success(`手机号已设置为:${value}`);
} else {
Toast.error('请输入有效的手机号');
}
} else if (value !== null) {
Toast.warning('手机号不能为空');
}
});
}
</script>
</body>
</html>