Eri*_*her 74 javascript jquery
我正在尝试做的是,如果你点击一个按钮,它会向下滚动(平滑)到页面上的特定div.
我在这里开始了一个JSFiddle:http://jsfiddle.net/ryXFt/2/
我需要的是,如果你点击按钮,它会平滑滚动到div'second'.
HTML:
.first {
width: 100%;
height: 1000px;
background: #ccc;
}
.second {
width: 100%;
height: 1000px;
background: #999;
}Run Code Online (Sandbox Code Playgroud)
CSS:
<div class="first"><button type="button">Click Me!</button></div>
<div class="second">Hi</div>Run Code Online (Sandbox Code Playgroud)
请帮忙.
Sud*_*oti 157
做:
$("button").click(function() {
$('html,body').animate({
scrollTop: $(".second").offset().top},
'slow');
});
Run Code Online (Sandbox Code Playgroud)
更新了Jsfiddle
小智 32
有许多使用JS库(如jQuery,Mootools,Prototype等)进行平滑滚动的示例.
以下示例适用于纯JavaScript.如果您在页面上没有jQuery/Mootools/Prototype,或者您不想使用繁重的JS库重载页面,那么示例将会有所帮助.
HTML部分:
<div class="first"><button type="button" onclick="smoothScroll(document.getElementById('second'))">Click Me!</button></div>
<div class="second" id="second">Hi</div>
Run Code Online (Sandbox Code Playgroud)
CSS部分:
.first {
width: 100%;
height: 1000px;
background: #ccc;
}
.second {
width: 100%;
height: 1000px;
background: #999;
}
Run Code Online (Sandbox Code Playgroud)
JS部分:
window.smoothScroll = function(target) {
var scrollContainer = target;
do { //find scroll container
scrollContainer = scrollContainer.parentNode;
if (!scrollContainer) return;
scrollContainer.scrollTop += 1;
} while (scrollContainer.scrollTop == 0);
var targetY = 0;
do { //find the top of target relatively to the container
if (target == scrollContainer) break;
targetY += target.offsetTop;
} while (target = target.offsetParent);
scroll = function(c, a, b, i) {
i++; if (i > 30) return;
c.scrollTop = a + (b - a) / 30 * i;
setTimeout(function(){ scroll(c, a, b, i); }, 20);
}
// start scrolling
scroll(scrollContainer, scrollContainer.scrollTop, targetY, 0);
}
Run Code Online (Sandbox Code Playgroud)
Ion*_* B. 10
如果你使用 scrollIntoView 函数怎么办?
var elmntToView = document.getElementById("sectionId");
elmntToView.scrollIntoView();
Run Code Online (Sandbox Code Playgroud)
也有 {behavior: "smooth"} .... ;) https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView
我用nico的答案玩了一下,感觉很跳跃.做了一些调查,发现window.requestAnimationFrame哪个是每个重绘周期调用的函数.这允许更清晰的动画.仍在努力研究步长的良好默认值,但对于我的示例,使用此实现看起来相当不错.
var smoothScroll = function(elementId) {
var MIN_PIXELS_PER_STEP = 16;
var MAX_SCROLL_STEPS = 30;
var target = document.getElementById(elementId);
var scrollContainer = target;
do {
scrollContainer = scrollContainer.parentNode;
if (!scrollContainer) return;
scrollContainer.scrollTop += 1;
} while (scrollContainer.scrollTop == 0);
var targetY = 0;
do {
if (target == scrollContainer) break;
targetY += target.offsetTop;
} while (target = target.offsetParent);
var pixelsPerStep = Math.max(MIN_PIXELS_PER_STEP,
(targetY - scrollContainer.scrollTop) / MAX_SCROLL_STEPS);
var stepFunc = function() {
scrollContainer.scrollTop =
Math.min(targetY, pixelsPerStep + scrollContainer.scrollTop);
if (scrollContainer.scrollTop >= targetY) {
return;
}
window.requestAnimationFrame(stepFunc);
};
window.requestAnimationFrame(stepFunc);
}
Run Code Online (Sandbox Code Playgroud)
对我有用的解决方案:
var element = document.getElementById("box");
element.scrollIntoView({behavior: "smooth"});
Run Code Online (Sandbox Code Playgroud)
您可以在这里探索更多选项
| 归档时间: |
|
| 查看次数: |
306449 次 |
| 最近记录: |