想实现这样的一个功能,点击子元素,让元素滚动至指定位置,怎么实现呢?

在代码实现之前,先了解下相关关键点。

1、scrollHeight 属性

通过 scrollHeight 属性可获得子元素的滚动高度,因此,子元素的总滚动高度等于每个子元素的 scrollHeight 之和。

2、scrollTop 属性

父元素的scrollTop的最大值,等于子元素的总滚动高度减去父元素的高度。

3、获取当前元素的滚动高度

在此例中,子元素都是li标签,于是,可通过获取 index,再配合 scrollHeight 求得子元素的 scrollTop 值。

4、滚动至指定位置

通过设置父元素的scrollTop的值等于子元素求得的scrollTop,即可使子元素滚动至父元素顶端。在本例中,我想滚动至中间位置,即减去3个子元素 scrollHeight 即可。

效果图

html代码:

<ul class="xq-time-picker-hour">
<li>01</li>
<li>02</li>
<li>03</li>
<!-- 省略的内容 -->
<li>21</li>
<li>22</li>
<li>23</li>
</ul>

js代码

$(`#${TimePickerID} .${Prefix}time-picker-body`).on("click", "li", function () {
let scrollNum = 3;
let index = $(this).index();
let scrollHeight = this.scrollHeight;
$(this).parent().animate({
scrollTop: scrollHeight * index - scrollHeight * scrollNum
}, 300);
});

大功告成

原文链接: https://www.jianshu.com/p/2a8136853eb8

通过scrollTop,使子元素滚动至指定位置的更多相关文章

  1. js滚动到指定位置

    序言:在网络上百度,关键字:“js div滚动到指定位置”,结果基本上大同小异!各种大神都给我们总结出来了四种滚动到指定位置的办法,可惜再下愚钝,每个都不会用,所以写了一个超级简单的方法来使初学者一看 ...

  2. selenium webdriver——JS滚动到指定位置

    1.DOM滚动方法 1.scrollIntoView(alignWithTop)  滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素.如果alignWithTop为true,或者省略它, ...

  3. 利用jquery制作滚动到指定位置触发动画

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>利用 ...

  4. jquery滚动到指定位置

    利用jquery实现页面可视区滚动到指定位置.直接上代码 //滚动到指定位置 function scrollTo(element,speed) { if(!speed){ speed = 300; } ...

  5. jQuery实现将div中滚动条滚动到指定位置的方法

    1.JS代码: onload = function () { //初始化 scrollToLocation(); }; function scrollToLocation() { var mainCo ...

  6. js 获取滚动位置,滚动到指定位置,平滑滚动

    1.获取当前滚动条位置信息 var top = dom.scrollTop; // 获取y轴上的滚动位置 var left = dom.scrollLeft; // 获取x轴上的滚动位置 2.滚动到指 ...

  7. scroll 滚动到指定位置触发事件 and 点击一按钮/链接让页面定位在指定的位置

    scroll 滚动到指定位置触发事件:$(function(){ $(window).scroll(function() { var s =$(window).scrollTop(); if (s&g ...

  8. 自定义ScrollViewer的Touch事件--触摸上下移动ScrollViewer滚动到指定位置

    double mPointY;//触摸点的Y坐标 double mOffsetY;//滚动条当前位置 bool mIsTouch = false;//是否触摸 //触摸事件 private void ...

  9. ios开发之--令UITableView滚动到指定位置

    这个应用场景还是挺多的,代码如下: //获取到需要跳转位置的行数 NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow: inSect ...

随机推荐

  1. fuel一键部署openstack

    一.安装环境: 1. 所需物理主机的要求如下 内存:8GB+,推荐16GB:(少于8GB的就免谈了) 磁盘:500GB+: 物理机OS:ubuntu-desktop-amd64 14.04(推荐) 或 ...

  2. Mysql外键约束--转载

    链接:http://www.cnblogs.com/xuanan/p/7240923.html#undefined 一.外键约束 1.什么是外键? 外键指的是其他表中的主键,当做该表的外键. 2.创建 ...

  3. Photoshop打造唯美的蓝色古装外景人物图片

    <点小图查看大图> 最终效果 1.打开原图素材大图,按Ctrl + J 把背景图层复制一层,用模糊工具把红圈区域背景模糊处理. <图1> 2.创建可选颜色调整图层,对黄色,绿色 ...

  4. protobuf使用详解

    https://blog.csdn.net/skh2015java/article/details/78404235 原文地址:http://blog.csdn.net/lyjshen/article ...

  5. this.$router.push、replace、go的区别

    1.this.$router.push() 描述:跳转到不同的url,但这个方法会向history栈添加一个记录,点击后退会返回到上一个页面. 用法: 2.this.$router.replace() ...

  6. 记录BigInteger犯过的一个错误

    2019年4月18号,面试遇到的面试题,当时做错了,纪念下. public class StrTest { public static void main(String[] args) { BigIn ...

  7. 定时任务调度工作(学习记录 四)schedule与scheduleAtFixedRate的区别

    根据两种情况来看区别 一.首次计划执行的时间早于当前的时间 1.schedule方法 “fixed-delay”:如果第一次执行时间被延迟了,随后的执行时间按照上一次实际执行完成的时间点进行计算 演示 ...

  8. iptables 限制ip访问3306端口

    *filter:INPUT DROP [0:0]  #全部关闭:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -s 172.4.4.14 -p tc ...

  9. 如何解决Redis中的key过期问题

    最近我们在Redis集群中发现了一个有趣的问题.在花费大量时间进行调试和测试后,通过更改key过期,我们可以将某些集群中的Redis内存使用量减少25%. Twitter内部运行着多个缓存服务.其中一 ...

  10. cyq.data 常见使用方法

    配置数据库链接:(这只是其中一种方式) AppConfig.DB.CommandTimeout = 800; AppConfig.DB.DefaultConn = "数据库链接地址" ...