将父级滚动到子元素的顶部

dan*_*elb 4 html css jquery

我正在尝试滚动div,以便其中的链接显示在顶部.

$(document).ready(function(){

    scrollit();
  
  
});

function scrollit(){
  
  	var elem= $("#link10");
							  
	if(elem.length){
		console.log(elem.offset().top);
		$("#sidebar").animate({ scrollTop: elem.offset().top }, { duration: 'medium', easing: 'swing' });
	}
  
  
}
Run Code Online (Sandbox Code Playgroud)
#sidebar{
  
  height:80px;
  width:200px;
  overflow:scroll;
  
  
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='sidebar'>
         <a href='#' id='link1'>1</a><br/>
         <a href='#' id='link2'>2</a><br/>
         <a href='#' id='link3'>3</a><br/>
         <a href='#' id='link4'>4</a><br/>
         <a href='#' id='link5'>5</a><br/>
         <a href='#' id='link6'>6</a><br/>
         <a href='#' id='link7'>7</a><br/>
         <a href='#' id='link8'>8</a><br/>
         <a href='#' id='link9'>9</a><br/>
         <a href='#' id='link10'>10</a><br/>
         <a href='#' id='link11'>11</a><br/>
         <a href='#' id='link12'>12</a><br/>
         <a href='#' id='link13'>13</a><br/>
         <a href='#' id='link14'>14</a><br/>
         <a href='#' id='link15'>15</a><br/>
         <a href='#' id='link16'>16</a><br/>
         <a href='#' id='link17'>17</a><br/>
         <a href='#' id='link18'>18</a>
    </div>

<br/><br/>
<a href='#' onclick='scrollit();return false'>again</a>
Run Code Online (Sandbox Code Playgroud)
首先,它会将偏移记录为特定距离(比如45),并将正确滚动到那里.然后,如果它再次运行,则记录的距离为0,然后滚动到侧边栏的顶部.应该说那个元素.

raf*_*uto 7

你可以在这个jsbin中看到你的代码正常工作

问题是该elem.offset().top值是相对于当前滚动位置的,因此您必须考虑该问题并重置滚动或折叠滚动位置(类似于window.pageYOffset).

更新:

danielb解决方案:

$("#sidebar").animate({ scrollTop: $("#sidebar").scrollTop()+elem.offset().top }, { duration: 'medium', easing: 'swing' }); 
Run Code Online (Sandbox Code Playgroud)

  • 它不起作用,每次您单击再次运行时,它都会来回跳动... (2认同)