首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用jQuery让元素滚动到视图中?

如何使用jQuery让元素滚动到视图中?
EN

Stack Overflow用户
提问于 2011-02-03 18:17:08
回答 11查看 256.7K关注 0票数 192

我有一个超文本标记语言文档,其中包含使用<ul><li><img...的网格格式的图像。浏览器窗口具有垂直和水平滚动。

问题:当我单击图像<img>时,如何让整个文档滚动到我刚刚单击的图像是top:20px; left:20px的位置?

我在这里浏览了一下类似的posts...although。我是JavaScript的新手,我想知道我自己是如何做到这一点的。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-02-03 18:24:33

既然你想知道它是如何工作的,我将一步一步地解释。

首先,您希望绑定一个函数作为图像的单击处理程序:

代码语言:javascript
复制
$('#someImage').click(function () {
    // Code to do scrolling happens here
});

这将对具有id="someImage"的图像应用单击处理程序。如果要对所有图像执行此操作,请使用'img'替换'#someImage'

现在来看实际的滚动代码:

  1. 获取图像偏移量(相对于文档):

var offset = $(this).offset();//包含.top和.left

  • topleft中减去20:

offset.left -= 20;offset.top -= 20;

  • 现在为<body><html>的顶部滚动和左侧滚动CSS属性添加动画效果:

$('html,body').animate({ scrollTop: offset.top,scrollLeft: offset.left });

票数 206
EN

Stack Overflow用户

发布于 2011-02-03 18:22:13

有一个名为scrollIntoView的DOM方法,所有主流浏览器都支持它,它可以将元素与视口的顶部/左侧对齐(或尽可能靠近)。

代码语言:javascript
复制
$("#myImage")[0].scrollIntoView();

在支持的浏览器上,您可以提供以下选项:

代码语言:javascript
复制
$("#myImage")[0].scrollIntoView({
    behavior: "smooth", // or "auto" or "instant"
    block: "start" // or "end"
});

或者,如果所有元素都有唯一的if,您可以只更改location对象的hash属性以支持后退/前进按钮:

代码语言:javascript
复制
$(document).delegate("img", function (e) {
    if (e.target.id)
        window.location.hash = e.target.id;
});

在此之后,只需将scrollTop/scrollLeft属性调整-20:

代码语言:javascript
复制
document.body.scrollLeft -= 20;
document.body.scrollTop -= 20;
票数 409
EN

Stack Overflow用户

发布于 2017-06-26 10:32:00

我见过的最简单的解决方案

代码语言:javascript
复制
var offset = $("#target-element").offset();
$('html, body').animate({
    scrollTop: offset.top,
    scrollLeft: offset.left
}, 1000);

Tutorial Here

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4884839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档