
在网页开发中,随机内容生成器是一种常见的交互功能,可以用于展示随机名言、图片、产品推荐等。最初的随机名言生成器通过J*aScript从一个字符串数组中随机选取文本并显示。将其改造为随机图片(例如图书封面)生成器,核心思路保持不变:依然是随机选择,但数据类型从字符串变为图片URL,并且DOM操作的目标从文本内容变为图片的src属性。
为了在网页上显示随机的图书封面,我们需要一个标签作为图片的占位符,以及一个按钮来触发图片更新。以下是改造后的HTML结构示例:
<div class="book-generator-container">
<h1>随机图书推荐</h1>
<div id="bookDisplayArea">
<!-- 图片将在这里显示,初始src可以为空或设置为一个默认图片 -->
@@##@@
</div>
<!-- 点击此按钮将触发新的图书封面显示 -->
<button onclick="newBook()" class="button-book-recommend">获取新书</button>
<!-- 引入J*aScript文件 -->
<script src="./js/bookGenerator.js"></script>
</div>关键点说明:
J*aScript代码负责存储图书封面的URL,并在用户点击按钮时随机选择一个封面并更新到页面上。为了提升用户体验,我们还将引入一个防重复机制,确保连续两次不会显示相同的图书封面。
首先,我们需要一个数组来存储所有可用的图书封面图片的URL。
// bookGenerator.js var images = [ 'https://m.media-amazon.com/images/I/81jRqrKKObL._AC_UL800_FMwebp_QL65_.jpg', 'https://m.media-amazon.com/images/I/81JgX8VgZiL._AC_UL800_FMwebp_QL65_.jpg', 'https://m.media-amazon.com/images/I/71CBWHK035L._AC_UL800_FMwebp_QL65_.jpg', 'https://m.media-amazon.com/images/I/91pXKpUfGgL._AC_UL800_FMwebp_QL65_.jpg', // 可以继续添加更多图书封面的URL ];
为了避免连续两次显示同一张图片,我们可以引入一个变量来记录上一次显示的图片索引。
let lastBook = -1; // 用于存储上一次显示的图书索引,初始化为-1以确保首次能正常显示
这个函数包含了随机选择逻辑和防重复判断,以及更新DOM的操作。
YouMind
AI内容创作和信息整理平台
207
查看详情
// bookGenerator.js
// ... (images 数组和 lastBook 变量定义在上面)
function newBook() {
let randomNumber;
// 使用 do...while 循环确保新生成的随机数不与上一次相同
do {
randomNumber = Math.floor(Math.random() * (images.length));
} while (randomNumber === lastBook); // 如果新生成的索引与上一次相同,则重新生成
lastBook = randomNumber; // 更新上一次显示的图书索引
// 通过ID获取图片元素,并更新其 src 属性
document.getElementById('bookCover').src = images[randomNumber];
}
// 页面加载完成后,可以考虑自动显示第一本书
document.addEventListener('DOMContentLoaded', newBook);代码解析:
将HTML和J*aScript代码结合起来,一个完整的随机图书封面生成器就完成了。
HTML (index.html):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>随机图书封面生成器</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
background-color: #f4f4f4;
}
.book-generator-container {
background-color: #fff;
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
text-align: center;
}
h1 {
color: #333;
margin-bottom: 20px;
}
#bookDisplayArea {
min-height: 150px; /* 确保有足够的空间,防止布局跳动 */
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 20px;
}
#bookCover {
max-width: 150px; /* 调整图片的最大宽度 */
height: auto; /* 保持图片比例 */
border: 1px solid #ddd;
border-radius: 4px;
transition: transform 0.3s ease-in-out;
}
#bookCover:hover {
transform: scale(1.05);
}
.button-book-recommend {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease;
}
.button-book-recommend:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div class="book-generator-container">
<h1>随机图书推荐</h1>
<div id="bookDisplayArea">
@@##@@
</div>
<button onclick="newBook()" class="button-book-recommend">获取新书</button>
<script src="./js/bookGenerator.js"></script>
</div>
</body>
</html>J*aScript (js/bookGenerator.js):
var images = [
'https://m.media-amazon.com/images/I/81jRqrKKObL._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/81JgX8VgZiL._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/71CBWHK035L._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/91pXKpUfGgL._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/71wL-s3zJ3L._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/710e-gWf8VL._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/713v7K15XGL._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/813oK-q21BL._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/81eB+kQ5+7L._AC_UL800_FMwebp_QL65_.jpg',
'https://m.media-amazon.com/images/I/81qEw7yB+sL._AC_UL800_FMwebp_QL65_.jpg',
];
let lastBook = -1; // 用于存储上一次显示的图书索引,初始化为-1以确保首次能正常显示
function newBook() {
let randomNumber;
// 使用 do...while 循环确保新生成的随机数不与上一次相同
do {
randomNumber = Math.floor(Math.random() * (images.length));
} while (randomNumber === lastBook); // 如果新生成的索引与上一次相同,则重新生成
lastBook = randomNumber; // 更新上一次显示的图书索引
// 通过ID获取图片元素,并更新其 src 属性
document.getElementById('bookCover').src = images[randomNumber];
}
// 页面加载完成后,自动显示第一本书
document.addEventListener('DOMContentLoaded', newBook);var books = [
{ cover: 'url1', title: '《J*aScript高级程序设计》', author: 'Nicholas C. Zakas' },
{ cover: 'url2', title: '《你不知道的J*aScript》', author: 'Kyle Simpson' },
// ...
];
// 相应的,HTML中需要更多元素(如 <p> 或 <span>)来显示这些额外信息,
// 并且 newBook 函数也需要更新这些元素的 innerHTML 或 textContent。通过本教程,我们学习了如何将一个简单的随机文本生成器升级为功能更强大的随机图书封面生成器。核心在于理解如何将数据类型从文本切换为图片URL,并相应地调整DOM操作。同时,引入的防重复机制显著提升了用户体验。这种模式不仅适用于图书封面,还可以扩展到任何需要随机展示图片内容的场景,例如随机产品展示、随机壁纸切换等。掌握这一技巧,将为你的网页增添更多动态和趣味性。
以上就是J*aScript实现随机图书封面生成器:优化与防重复展示的详细内容,更多请关注其它相关文章!
# 如何将
# 河南竞价网站优化产品
# 外贸网站优化教程电子版
# 金乡网络seo优化
# 咖啡店创业营销推广方案
# 优势关键词排名机构
# 铜梁网站建设高端
# 钉钉的营销推广方案
# 当当网网站建设分析
# 重庆seo搜索排名公司
# 游戏网站推广有什么用
# 将其
# 而在
# 本书
# css
# 这是
# 数据结构
# 两次
# 首次
# 随机数
# 加载
# 字符串数组
# 壁纸
# ai
# js
# html
# java
# javascript
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
豆包AI怎样为教育场景定制答疑逻辑_为教育场景定制豆包AI答疑逻辑方案【方案】
除了Copilot,还有哪些值得一试的VS Code AI插件?
Vue 3中独立响应式实例的创建与应用
芒果TV官网登录入口 芒果TV官方网站登录入口
更换小红书群背景怎么换?小红书群规则怎么设置?
Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法
《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐
画质怪兽120帧安卓和平精英免费版
阿里云共享相册入口在哪
谷歌浏览器官方镜像获取方法_谷歌浏览器网页版入口极速直达
Word如何将文字快速转成表格 Word文本转换成表格功能使用技巧【效率】
手机坏了微信聊天记录怎么导出来 新手机恢复聊天记录技巧
Apple Music无故扣费引质疑
解决Pandas DataFrame高度碎片化警告:高效创建多列的策略
J*aScript模拟悬停与点击:自动化网页动态元素交互指南
sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置
天堂漫画网页版在线阅读 天堂漫画手机版入口
VS Code快捷键when上下文子句的妙用
汽水音乐在线入口 汽水音乐网页端官方页面快速打开
FullCalendar自定义按钮样式定制指南
J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解
在Spring Boot Thymeleaf中利用布尔属性实现容器的条件显示
mysql中如何配置字符集和排序规则_mysql字符集排序配置
Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】
Final Cut Pro视频加EQ教程
XPath动态元素定位:如何精准选择文本内容变化的元素
163邮箱登录入口官网 163.com邮箱登录入口
《下一站江湖2》心法融合技巧
《长生:天机降世》火塔小怪大全
如何在CSS中使用伪类选择器_hover实现悬停效果
《虎扑》取消评分记录方法
键盘保修需要什么_键盘售后维修流程
邦丰播放器频道搜索设置
晓晓优选app支付宝绑定方法
飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读
TikTok笔记文字无法编辑如何解决 TikTok笔记文字编辑优化方法
偃武诸葛亮阵容搭配推荐
在Django中动态检查模型关联:一种灵活的解决方案
鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】
抖音猜你想搜能说明对方搜过吗
VS Code如何设置默认配置
uc浏览器官网网页版使用 uc浏览器官网免费在线首页
B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】
TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法
Win10输入法不见了怎么办 Win10找回语言栏图标教程
Go Template中优雅处理循环最后一项:自定义函数实践
PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素
Python定时发送QQ消息
手机耗电快是什么原因 延长手机电池续航时间的设置方法【详解】
知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法
2025-10-03
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。