滚动到页面上value = 'x'
Scroll to location on page where value = 'x'
我想在我的页面顶部有一个链接,如:-
<a href="#" id="example">Scroll to</a>
基本上我想做以下事情:-
当#example被点击时,我想让它滚动到页面上h1值= 'test'的位置:-
$('#example').bind('click',function() {
// GO TO LOCATION ON PAGE WHERE h1 value ='test' ( <h1> = 'test' </h1> )
});
这是可能的吗?
我知道我可以为此使用锚,但我使用的是一个菜单插件,它不添加这个,所以我需要根据值是什么,因为这是不同部分之间唯一的东西。
使用.filter()
方法查找目标元素,然后使用其.offset()
(查找其在文档中的位置)和.animate()
(页面的scrollTop
属性)
$('#example').bind('click',function(e) {
e.preventDefault();
var target = $('h1').filter(function(){ return $(this).text() == 'test' ;});
$('html,body').animate( {
scrollTop: target.offset().top
});
});
在http://jsfiddle.net/Lc8gg7pm/1/演示
您甚至不需要Javascript就可以做到这一点。在h1标签之前,可以放一个锚:
<a name="scroll-to-location"></a>
<h1>test</h1>
那么你的链接应该是这样的:
<a href="#scroll-to-location">Scroll to</a>
或者您可以遵循以下SO答案:https://stackoverflow.com/a/6677069/324978
当然,对于这样一个简单的任务,你可以避免使用javascript,但如果你真的需要,你可以让它更动态,更流畅。
你的数据目标可以参考目标的id(更好)或目标的文本,如果这是你真正想要的…
<a class="inpagelink" href="#" id="example" data-target="test">Scroll to</a>
如果是一个id,目标HTML应该是这样的
<h1 id="test">some title</h1>
也可以是目标文本
<h1>test</test>
如何定位,使用jQuery:
- 目标ID
$('.inpagelink').on('click', function(e){ e.preventDefault(); //get the targets position var $whereto = $('#'+ $(this).attr('data-target')); var gotopx = parseInt($whereto.offset().top); //and scroll there, in 1 sec $('html, body').animate({ scrollTop: gotopx }, 1000); });
目标文本$('.inpagelink').on('click', function(e){ e.preventDefault(); //get the targets position var $whereto = $('h1:contains(' + $(this).attr('data-target') + ')'); var gotopx = parseInt($whereto.offset().top); //and scroll there, in 1 sec $('html, body').animate({ scrollTop: gotopx }, 1000); });
:contains
是区分大小写的,所以请记住。
如果我理解正确,你有一些HTML,你不能改变(因为它是生成的),但你希望能够通过一个超链接跳转到某些部分,即使HTML没有锚。
你可以试着看看生成的代码是否有带有id的标签,你可以像使用锚一样使用它们。
如果生成的部分也没有id,您可以遍历所有<h1>
并为它们分配id,或者在页面加载后简单地添加锚,如果这不会破坏生成的代码。像这样:
var headings = document.getElementsByTagName('H1');
for (var x=0;x<headings.length;x++) {
headings[x].id=headings[x].innerHTML;
}
JSFiddle
我希望我正确理解了你的情况。
不能帮你滚动,但要找到值:
var jsondata = {value: "whatever value you want"};
$('#example').bind('click', jsondata, function(e) {
$('h1').each(function() {
if ($(this).val() == jsondata.value) {
$('body').scrollTo($(this)); //never used this before, but can't see why it wouldn't work.
}
}
}
我认为这是正确的:)它确实假设你的h1有一个值标签,如:
<h1 value='test'>test</h1>
- 幻灯片滚动javascript不起作用
- 将视口底部滚动到元素底部
- jQuery Lazy加载动画滚动
- 设置滑块分区上的滚动
- 结合jQuery和jetpack无限滚动
- 单击顶部导航时如何进行向下滚动效果(向下滑动).
- 滚动到容器中的下一个元素-几乎到了
- 只覆盖箭头键滚动事件
- Javascript如何找到滚动事件的来源
- Image赢得't隐藏在滚动jQuery上
- Safari(Mac OS)上的jQuery平滑滚动问题
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 禁用(而不是隐藏)浏览器滚动条
- JavaScript上下滚动不可预测
- 滚动和表格
- 谷歌地图劫持了iphone's滚动(触摸事件)-如何恢复
- 在ember/handlers中使用value和valueBinding有什么区别
- 我希望只有在我滚动页面后才能显示我的返回页首图标
- 滚动到页面上value = 'x'
- Angularjs自定义下拉滚动到value