javascript - 可滚动到视图中的 div 内的滚动元素
问题描述
我有一点点问题我是一个初学者程序员并且正在编写我的第一个网络应用程序,我遇到了一点点问题。
我有一个高度为 300px 的父 div,在该 div 内我有 20 个子 div,每个子 div 都有不同的 id 属性,一个 div 有一个特殊的类来改变他的外观。我希望用户始终可以看到该 div,因此他们不必滚动即可找到它。
我试过了:
const renderStandings = (team,teamID) =>{
let cssClass = "team-standing";
if(team.team.id === teamID){
cssClass = "team-standing favouriteTeam";
}
HTML 标记
const markup = `
<div class="${cssClass}" data-teamID="${team.team.id}">
<div class="team-position"><p>${team.position}</p></div>
<div class="team-crest"><img src="src/img/logos/${team.team.id}.svg"></div>
<div class="team-name"><p>${team.team.name}</p></div>
<div class="team-gamesplayed"><p>${team.playedGames}</p></div>
<div class="team-goaldiffrence"><p>${team.goalDifference}</p></div>
<div class="team-points"><p>${team.points}</p></div>
</div>
`;
document.querySelector('.league-standings').insertAdjacentHTML('beforeend',markup);
滚动查看
if(document.querySelector('.favouriteTeam')){
var el = document.querySelector('.favouriteTeam');
el.scrollIntoView({
behavior: 'auto',
block: 'center',
inline: 'center'
});
}
}
}
这会将 div 完全按照我想要的方式滚动到视图中,但它也会将整个网站滚动到父 div,我不希望这样。
问题
所以问题是如何在不滚动整个网站的情况下将该 div 滚动到视图中。最好我很想在 vanilla JS 中得到答案,因为这就是我目前正在练习的内容,并且在我对 JS 感到满意之前我不打算学习任何框架。
我想要实现的图解结果:
这是现在,它滚动整个网站
这就是我想要的样子 [2]:https ://i.stack.imgur.com/Ldg3N.jpg
解决方案
在我的问题中,答案是使用(scrollTop)。由于每个子 div 的高度为 50px,因此我添加了属性位置,它给了我想要居中的元素的位置(1-20),因此我可以计算 scrollTop 的值,以使元素恰好位于可滚动 div 的中心. 由于其中 7 个已经可见,我从第 8 个位置开始。
if(document.querySelector('.favouriteTeam').getAttribute('data-teamposition')>7){
document.querySelector('.league-standings').scrollTop = 200 + ( 50 * (document.querySelector('.favouriteTeam').getAttribute('data-teamposition') - 8 ));
}
推荐阅读
- javascript - 为什么在 mdn 的这个示例中,每个内部函数都将先前的(父)函数参数作为输入?
- reactjs - Chart.js (react-chartjs-2) - 增加图例标签之间的边距,但不在图表上
- reactjs - 我们可以自定义 create-react-app 应用程序的 babel 和 webpack 的默认配置吗?
- node.js - 如何以 zip 格式下载发布到 GitHub 包注册表的 NPM 包?
- python-3.x - 为什么同步函数中的 time.sleep 会阻塞主 FastAPI 线程?
- django - 区分在 django 中单击了哪个链接按钮
- mysql - 如何将 yyyymmdd hhmmss Etc/GMT 转换为 yyyy-mm-ddThh:mm:ss
- flutter - 从 .p12 文件或 .cer 文件管理器中获取签名
- visual-studio-code - VS Code:如何停用行选择器?
- javascript - 如何在 Electron 15 中导入菜单