我努力在scrollable div
上移动输入元素。
我想在输入元素聚焦时将输入元素移动到顶部,意味着在div#up
之后(输入1的初始位置)。 div应该向下滚动并将输入元素移动到顶部位置。
我尝试了以下代码,但它无法正常运行,
$('input').on('focus', function() {
console.log($(this).offset());
console.log($(this).position());
$('input').removeAttr('style');
var ot = parseInt($(this).offset().top),
pt = parseInt($(this).position().top);
var st = ot - 108; //108 is height of up div
if (st - pt > 0) {
st = st - pt;
}
if (st < 0) {
st = ot - 108
}
console.log(st, ot, pt);
$('#container').animate({
scrollTop: st
}, 200);
});
我也为online demo做了同样的事。
答案 0 :(得分:2)
答案 1 :(得分:1)
我需要添加滚动位置的边距,然后它对我有效,
$('input').on('focus', function () {
var ot=parseInt($(this).offset().top),
pt=parseInt($(this).position().top);
var st=ot-108;//108 is height of up div
var scrollTop=$('#container').scrollTop();// this is I need to add
if(scrollTop){ // if scroll in container
st=st+scrollTop; // then add the margin of scroll
}
$('#container').animate({
scrollTop: st
},200);
});
答案 2 :(得分:0)
当容器滚动时,内部输入元素的position()。top会发生变化,因此你应该添加container.scrollTop。顺便说一下,你为什么考虑offset
?这似乎毫无用处
$('input').on('focus', function () {
var $container = $("#container");
var scrollTop = $container.scrollTop() + $(this).position().top;
$('#container').animate({
scrollTop: scrollTop
},200);
});