我正在尝试为我的Tumblr添加一个动画滚动,我在这个问题中找到了一个:Smooth scroll to div id jQuery。但诀窍是,我需要按钮跳转到Tumblr上的特定帖子。
我发现每个帖子都有一个名为PostID
的特定ID,我找到了我需要的特定PostID
。我找不到的是在HTML中实际使用PostID
,所以我不知道如何定位它。我试过了:
$("#button").click(function() {
$('html, body').animate({
scrollTop: $("post-{130746374784}").offset().top
}, 2000);
});
但我确信我说错了。谁能告诉我如何定位它?
答案 0 :(得分:1)
正如@approxiblue中comment所指出的,Tumblr提供了可用于主题的各种variables,包括PostID
。
因此可以替换这样的东西:
<div class="post photo">
<!-- more HTML here -->
</div>
有这样的事情:
<div class="post photo" id="myPost_{PostID}">
<!-- more HTML here -->
</div>
允许更直接地定位帖子,如下:
var post = $('#myPost_129129898812');
观察Tumblr页面,似乎PostID
仅在链接中可用。这意味着我们必须找到包含PostID
的链接,然后返回其容器div
。
这是主页上Tumblr帖子的一个示例:
<!-- PHOTO POST
///////////////////////////////////////////////////////-->
<div class="post photo">
<div class="wide">
<a href="http://stolenjokescomic.tumblr.com/image/129129898812">
<img src="http://41.media.tumblr.com/16c2f56a9f739889fbd4896f8524907c/tumblr_nupf28wgLl1toph1no1_1280.png" alt="" />
</a>
</div>
<div class="narrow">
<div class="metadata">
<div class="date">
<a href="http://stolenjokescomic.tumblr.com/post/129129898812">Sep. 15 2015</a>
</div>
</div> <!-- metadata end -->
</div> <!-- narrow end -->
</div> <!-- post end -->
我们会:
post
date
href
的属性post/129129898812
定位子链接,这是此示例中使用的PostID
parents()
post
的家长,然后返回
代码:
$("#button").click(function() {
var position = $('.post .date a[href*="post/129129898812"]')
.parents('.post')
.offset().top;
$('html, body').animate({
scrollTop: position
}, 2000);
});
您可以通过以下方式试用:
粘贴此代码:
$('html, body').animate({
scrollTop: $('.post .date a[href*="post/129129898812"]')
.parents('.post').offset().top
}, 2000);
在Firefox中运行它( CTRL + R )
页面应向下滚动到帖子。除非你在几个月内阅读这篇文章,否则该帖子不再在主页上。
PostID
。zoomIn
功能的元素。zoomIn
功能以达到目标。代码:
var zoomIn = $('.zoom-in');
var target = $('#content section .about a[href*="post/18629325910"]').parents('section');
var id = $('#content section').index(target[0]);
for(var i=0; i<id; ++i) {
zoomIn.click();
}
您可以使用便笺簿在OKMove上试用此代码。
如果这个过快,我们可以使用递归setTimeout
:
var zoomIn = $('.zoom-in');
var target = $('#content section .about a[href*="post/18629325910"]').parents('section');
var index = $('#content section').index(target[0]);
var count = 0;
var weNeedToGoDeeper = function() {
if(count < index) {
zoomIn.click();
setTimeout(weNeedToGoDeeper, 400);
}
++count;
};
weNeedToGoDeeper();
我们可以从任何位置进一步扩展,通过解析transform
属性来分析当前位置,然后通过计算我们之间的相对位置来决定缩放的方式和次数。我们想去的地方:
function parseMatrix(s) {
return (
s.match(/^matrix3d.(.*).$/) || ['', '0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0']
)[1].split(', ');
}
var zoomIn = $('.zoom-in');
var zoomOut = $('.zoom-out');
var content = $('#content');
var target = $('#content section .about a[href*="post/18629325910"]').parents('section');
var index = $('#content section').index(target[0]);
var pos = parseMatrix(pos = content.css('transform'))[14];
pos = Math.round(pos/1000);
pos = index - pos;
var zoomElem = pos <= 0 ? zoomOut : zoomIn;
pos = Math.abs(pos);
for(var i=0; i<pos; ++i) {
zoomElem.click();
}