Prompt 模式
提示:
- 可用于替代浏览器内置的
window.prompt弹框; - 只能同时创建一个
prompt弹窗; - 不能使用
esc按键关闭。
基础用法
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
</script>文本域输入框
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
inputType: "textarea",
width: "550px",
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
</script>自定义遮罩层背景色
注意:
默认情况下,遮罩层背景色是通过 css 变量设置的,如果想通过参数的形式自定义遮罩层背景色,则对应的 css 变量将失效,并且在深 / 浅色模式切换时,将不会自动适配,此时背景色将始终是参数指定的颜色值。
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
maskBackground: "rgba(190, 190, 255, .9)",
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
</script>自定义按钮文字
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
ok: {
text: "立即提交",
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
},
cancel: {
text: "我再想想"
}
} );
}
</script>自定义宽度
提示:
支持所有 css 宽度单位,如:px、em、rem、vw 等等,也可以设置成百分比形式,如:80%。
注意:
组件会对传入的宽度值进行计算检测,根据检测结果按照如下规则进行设置:
- 符合要求则正常设置传入的宽度值;
- 如果宽度值大于页面可视区域宽度,将自动调整为【页面可视区域宽度 - 40px】;
- 如果宽度值小于 300px,将自动调整为 300px,因为弹窗的最小有效宽度是 300px。
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
width: "800px",
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
</script>动画模式
vue
<template>
<button @click="openScale">scale 模式</button>
<button @click="openSlide">slide 模式</button>
<button @click="openFade">fade 模式</button>
</template>
<script setup>
const openScale = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
animationType: "scale",
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
const openSlide = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
animationType: "slide",
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
const openFade = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
animationType: "fade",
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
</script>打开和关闭后的回调事件
提示:
这两个回调事件会在打开和关闭 【动画结束后】 触发。
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
afterOpen: () => {
alert( "打开了 prompt" );
},
afterClose: () => {
alert( "关闭了 prompt" );
},
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
</script>调用 close 方法关闭
提示:
可根据实际需要,通过手动调用 $tinylayer.prompt.close() 方法关闭 prompt 弹窗。
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
ok: {
closable: false,
callback: ( okConfig, promptConfig ) => {
promptConfig.cancel.disabled = true;
okConfig.disabled = true;
okConfig.loading = true;
okConfig.text = "稍后关闭";
setTimeout( () => {
$tinylayer.prompt.close();
}, 3000 )
}
}
} );
}
</script>设置默认值
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请随便输入些内容",
defaultValue: "12345",
ok: {
callback: ( okConfig, promptConfig, value ) => {
value && alert( value );
}
}
} );
}
</script>输入值校验
vue
<template>
<button @click="open">打开</button>
</template>
<script setup>
const open = () => {
$tinylayer.prompt.open( {
title: "请输入密码",
placeholder: "在此输入访问权限密码",
inputType: "password",
pattern: /^[A-Za-z0-9]{5,18}$/,
errorMsg: "密码格式错误(请输入 5-18 位的数字或英文字母)",
cancel: {
text: "取消验证"
},
ok: {
text: "验证身份",
closable: false,
callback: ( okConfig, promptConfig, value, passed ) => {
if ( passed === true ) {
okConfig.disabled = true;
okConfig.loading = true;
okConfig.text = "正在验证";
promptConfig.cancel.disabled = true;
promptConfig.inputDisabled = true;
setTimeout( () => {
alert( `输入值:${ value } 已校验通过` );
$tinylayer.prompt.close();
}, 3000 )
}
}
}
} );
}
</script>属性
| 属性 | 说明 | 类型 | 默认值 |
| title | 标题 | String | - |
| zIndex | 层级 | Number | 2000 |
| maskBackground | 遮罩层背景色 | String | - |
| defaultValue | 输入框默认值 | String | - |
| placeholder | 输入框提示语 | String | - |
| inputType | 输入框类型,可选值:text、password、textarea | String | text |
| inputDisabled | 禁用输入框 | Boolean | false |
| pattern | 用于校验输入值的正则表达式 | RegExp | - |
| errorMsg | 错误提示语 | String | - |
| tip | 输入框辅助提示语 | String | - |
| width | 弹框宽度(最小有效值:300px) | String | 370px |
| animationType | 动画模式,可选值:scale, slide, fade | String | scale |
| afterOpen | 打开后的回调事件 | Function | 空函数 |
| afterClose | 关闭后的回调事件 | Function | 空函数 |
| ok.text | 确定按钮的文字 | String | 确定 |
| ok.callback | 点击确定按钮的回调事件,参数: 1. 确定按钮的配置项 2. 弹窗的所有配置项 3. 输入框的值 4. 如果设置了 pattern 属性,则返回代表校验结果的布尔值 | Function | 空函数 |
| ok.closable | 点击确定按钮可关闭弹窗 | Boolean | true |
| ok.disabled | 禁用确定按钮 | Boolean | false |
| ok.loading | 激活确定按钮的加载中效果 | Boolean | false |
| cancel.text | 取消按钮的文字 | String | 取消 |
| cancel.disabled | 禁用取消按钮 | Boolean | false |
| cancel.callback | 点击取消按钮的回调事件 | Function | 空函数 |
方法
js
// 打开
$tinylayer.prompt.open();
// 关闭
$tinylayer.prompt.close();