JavaScript实现京东快递单号实时预览效果
作者:小括号时间:2026-10-23 23:59:47浏览:83
本文介绍如何使用JavaScript实现京东快递单号的实时查询预览效果。通过监听键盘事件,将输入框内容同步至上方大字号容器,并根据输入状态控制容器的显示与隐藏,同时区分keydown、keypress与keyup事件在文本框中的触发时机。
京东快递单号实时预览实现
本文通过一个具体案例,演示如何利用JavaScript模拟京东快递单号的查询交互效果,供读者参考学习。
核心需求是:当用户在文本输入框中输入字符时,输入框上方需自动显示对应的大字号内容,实现实时预览。
实现逻辑分析如下:
- 首先,当用户开始输入内容时,上方用于展示大字号的大盒子应当自动显现(其字号设置得比输入框更大)。
- 其次,需要监听表单的键盘事件,以便实时检测用户的输入行为。
- 在检测到输入时,获取快递单号输入框中的当前值(value),并将其赋值给上方大盒子的内容,实现数据同步。
- 若快递单号输入框内的内容为空,则需隐藏上方大盒子,避免显示空白区域。
- 此外,当输入框失去焦点时,无论是否有内容,上方大盒子也应保持隐藏状态。
需注意键盘事件在文本框中的特性:keydown和keypress事件触发时,文字尚未落入文本框;而keyup事件触发时,文本已完整落入文本框中。
<style>
* {
padding: 0;
margin: 0;
}
.search {
position: relative;
width: 178px;
margin: 100px;
}
.con {
display: none;
position: absolute;
top: -48px;
width: 171px;
border: 1px solid rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
padding: 5px 0;
font-size: 18px;
line-height: 20px;
color: #333;
}
.con::before {
content: "";
width: 0;
height: 0;
position: absolute;
top: 28px;
left: 18px;
border: 8px solid #000;
border-style: solid dashed dashed;
border-color: #fff transparent transparent;
}
</style>
</head>
<body>
<div class="search">
<div class="con"></div>
<input type="text" placeholder="请输入您的快递单号" class="jd" />
</div>
<script>
var con = document.querySelector(".con");
var jd_input = document.querySelector(".jd");
jd_input.addEventListener("keyup", function () {
if (this.value == "") {
con.style.display = "none";
} else {
con.style.display = "block";
con.innerHTML = this.value;
}
});
//当失去焦点,就隐藏盒子
jd_input.addEventListener("blur", function () {
con.style.display = "none";
});
//当获得焦点,就显示盒子
jd_input.addEventListener("focus", function () {
if (this.value !== "") {
con.style.display = "block";
}
});
</script>
</body>
以上即为实现该功能的全部关键步骤,希望能为读者的学习提供有益帮助,也欢迎大家继续支持本站获取更多技术分享。
作者最新文章
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
