滚动问题时左右移动元素

Posted

技术标签:

【中文标题】滚动问题时左右移动元素【英文标题】:move element right and left while scrolling issue 【发布时间】:2016-04-09 14:32:27 【问题描述】:

在此示例中,我试图在上下滚动时左右移动元素FIDDLE 问题是 div 将继续移动以伸出页面并且不会返回其原始位置。这是我试图模拟的例子Original Example

html

<div class='container'>
<div class='inner'>
</div>
</div>

JS

var lastScrollTop = 0;
$(window).scroll(function(event)
var st = $(this).scrollTop();
if (st > lastScrollTop)
    var offset = $(".inner").offset();
    var w = $(window);
    var x = offset.left;
    console.log(x);
    $(".inner").css("left",x+50);
 else 
    var offset = $(".inner").offset();
    var w = $(window);
    var y = offset.left;
    console.log(y);
    $(".inner").css("left",y-50);

lastScrollTop = st;
);

CSS

.containerwidth:100%; position: relative; float:left; background:#fff; height:1200px;
.innerwidth:150px; height:100px; position:absolute; top:20%; left:10%; background:red;

【问题讨论】:

【参考方案1】:

您需要将其偏移滚动量,而不是每次移动一个量。您正在排队多次移动并每次添加 50px。

var offset = $(".inner").offset();
$(window).scroll(function(event) 
  var st = $(this).scrollTop();
  $(".inner").css("left", st + offset.left);
);

JSFiddle: https://jsfiddle.net/TrueBlueAussie/x0vtopzv/1/

锁定滚动后,您可以使用 st 值上的乘数来调整位置。

注意: JSFiddle 在body 上有 8px 的边距。这会抛出偏移位置,需要删除或考虑在内。

https://jsfiddle.net/TrueBlueAussie/x0vtopzv/6/

【讨论】:

它可以工作,但它不会回到原来的地方看到这个jsfiddle.net/x0vtopzv/5 这可能是由于样式给出了不正确的左偏移。让我看看:) @phpUser:是的。 JSFiddle 在body 上有 8px 的边距。 jsfiddle.net/TrueBlueAussie/x0vtopzv/6 那会抛出偏移位置,需要删除或考虑。 我有一个带有引导程序的页面,但有同样的问题,虽然 body 和 html 是 0 margin 0 padding 有什么办法可以调整这个吗?我已将 var st = $(this).scrollTop() 更改为 var st = $(this).scrollTop()-50 并在大屏幕上工作,但在平板电脑和手机上它移到了左侧 @PHPUser:我看过代码,它遍历祖先来计算元素的正确偏移量,但不记得细节。开始谷歌搜索那个问题? :)

以上是关于滚动问题时左右移动元素的主要内容,如果未能解决你的问题,请参考以下文章

在运行时检测 javascript 文本或元素溢出

移动端导航过多,点击导航左右滚动回弹

js scrollIntoView 滑动问题

网页设计如何设置网页部分内容不随着滚动条而移动移动?

我在做移动端时遇见的css问题

Jquery 可排序元素应该只上下移动而不是左右移动