javascript - 如何“阅读更多 - 仅在文本溢出时阅读更少(否则隐藏阅读更多)”
问题描述
我对 JavaScript 还很陌生,并且遇到了一些复杂的问题。
如果正文/容器有“溢出文本”或“高度>给定的“正文”高度,我想调用“阅读更多”。else {隐藏“阅读更多”}
我自己无法做到。我在这里粘贴我的简单阅读更多/阅读更少的示例。请你帮我即兴创作。
const readMoreBtn = document.querySelector('.read-more-btn');
const text = document.querySelector('.text');
readMoreBtn.addEventListener('click',(e)=>{
text.classList.toggle('show-more');
if(readMoreBtn.innerText === 'Read more'){
readMoreBtn.innerText = 'Read less';
}
else{
readMoreBtn.innerText = 'Read more';
}
});
<style>
body{
font-family: Arial;
text-align: justify;
max-width: 600px;
padding: 20px;
background-color: #f0f0f0;
}
.moreText{
display:none;
}
.read-more-btn{
padding: 15px 60px;
border: 1 px solid #828282;
outline: none;
cursor:pointer;
}
.text.show-more .moreText{
display:inline;
}
</style>
<body>
<h1>Hello World</h1>
<p class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa.<span class="moreText"> Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.</span></p>
<button class="read-more-btn">Read more</button>
</body>
解决方案
使用包含 的overflow: hidden;
div ( text-wrapper
) 中的属性<p>
来隐藏溢出的文本,然后,只需在按下 read-more 或 read-less 时切换类。在阅读更多内容时,将 div 高度放在 上height: auto;
,这样 div 就会调整到内容高度。
const readMoreBtn = document.querySelector('.read-more-btn');
const text = document.querySelector('.text-wrapper');
readMoreBtn.addEventListener('click', (e) => {
text.classList.toggle('show-more');
text.classList.toggle('show-less');
if (readMoreBtn.innerText === 'Read more') {
readMoreBtn.innerText = 'Read less';
} else {
readMoreBtn.innerText = 'Read more';
}
});
body {
font-family: Arial;
text-align: justify;
max-width: 600px;
padding: 20px;
background-color: #f0f0f0;
}
.read-more-btn {
outline: none;
cursor: pointer;
}
.show-less {
height: 200px;
overflow: hidden;
}
.show-more {
height: auto;
}
<body>
<h1>Hello World</h1>
<div class="text-wrapper show-less">
<p class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus
vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer fringilla congue eros non fermentum.
Sed dapibus pulvinar nibh tempor porta.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scelerisque enim ligula venenatis dolor. Maecenas nisl est, ultrices nec congue
eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. Integer
fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum interdum, nisi lorem egestas vitae scelerisque enim ligula venenatis dolor.
Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. Fusce luctus vestibulum augue ut aliquet. Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis imperdiet sed ornare turpis. Donec vitae dui
eget tellus gravida venenatis. Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta.</p>
</div>
<br>
<a class="read-more-btn" href="#">Read more</a>
</body>
推荐阅读
- javascript - 使用动态数据的自定义 JavaScript
- ssl - 未使用 python-ldap 模块设置最小 TLS 版本
- python - Quart Web 应用程序上的 asyncio Discord 机器人会话超时
- laravel - Laravel Mix,节点通知器,SyntaxError:意外的令牌“导出”
- server - 我们可以在由另一个管理程序创建的操作系统中安装管理程序吗?
- java - 过滤后处理元素已删除所有元素
- angular - 如何以角度获取 vue 的 v-else-if 功能?
- java - Spring Boot 应用程序同时具有 2 个数据库?
- android - 使用滚动行为时,有什么方法可以保持我的扩展浮动操作按钮固定位置
- fortran - OpenACC Fortran 循环中的顺序点积