【问题标题】:Image move with mouse position - box issue?图像随鼠标位置移动 - 框问题?
【发布时间】:2017-04-26 01:25:41
【问题描述】:

我最初从这里获取了一些信息并对其进行了扩展:onextrapixel.com/examples/interactive-background/index4.html

我改为合并图像以在页面上随鼠标位置移动,但是似乎存在一个问题,即顶部“框”会切断一些悬停的图像。您可以在示例页面 here

上看到它的实际效果

我的 CSS:

.top-image {
    background:url('http://i.imgur.com/wZRaMrB.png');
    position:absolute ;
    top:400px;
    width:100%;
    z-index:0;
   height:100%;
   background-repeat: no-repeat;
}

我的js:

$(document).ready(function() {
    var movementStrength = 25;
    var height = movementStrength / $(window).height();
    var width = movementStrength / $(window).width();
    $("body").mousemove(function(e){
        var pageX = e.pageX - ($(window).width() / 2);
        var pageY = e.pageY - ($(window).height() / 2);
        var newvalueX = width * pageX * -1 - 25;
        var newvalueY = height * pageY * -1 - 50;
        $('.top-image').css("background-position", newvalueX+"px     "+newvalueY+"px");
});
});

我也希望在页面右侧重复此操作。

在 cmets 中提出一些建议后,这里是 jsfiddle https://jsfiddle.net/yx1w8ysr/#&togetherjs=D4Q1xTfcaO

【问题讨论】:

  • 看来您可以尝试将background-size 设置为contain
  • @KingKing 我仍然注意到顶部被覆盖了,它使图像的大小变成了 2 倍,但我非常感谢您的帮助!还有其他想法吗?
  • 如果您提供一个简单的小提琴来演示问题并帮助其他人在它按您预期的那样工作之前尝试编辑/进行更改会更好。
  • 顺便说一句:background-size: contain 应该使渲染的图像完美地位于元素的框内。如果还盖着,这里肯定有什么奇怪的地方。关于尺寸,当然是你元素的尺寸。只需将固定设置的大小减小到您想要的值即可。
  • @KingKing jsfiddle.net/yx1w8ysr/#&togetherjs=D4Q1xTfcaO 感谢您的帮助和建议!我同意发生了一些古怪的事情,我认为它隐藏在 Java 中,我还不太了解这种语言

标签: javascript jquery html css hover


【解决方案1】:

如果你事先知道图片的大小,你可以固定设置你的div的大小,不需要使用background-size:contain。而是将其设置为某个相对值(小于 100%),以便为背景图像的移动提供填充。但是,如果您不知道图像的大小,您应该使用background-size:contain 来确保您的图像位于您的 div 容器内。然而,使用这种方法,我们无法再控制图像的大小。这意味着您不能使用background-position 来移动图像(因为大小适合其父级,移动会导致图像被切断)。

因此,您需要另一个包装器/容器并移动您的内部 div (.top-image),而不是更改 background-position

这里是详细代码:

var movementStrength = 25;
var w = $(window).width();
var h = $(window).height();

$(window).mousemove(function(e) {
  var pageX = (e.pageX - w / 2) / w / 2;
  var pageY = (e.pageY - h / 2) / h / 2;
  var newvalueX = pageX * movementStrength;
  var newvalueY = pageY * movementStrength;
  $('.top-image').css({
    left: newvalueX + 'px',
    top: newvalueY + 'px'
  });
});
.container {
  padding: 25px;
  width: 35%;
  height: 35%;
  position: absolute;
  top: 400px;
}

.top-image {
  background: url('http://i.imgur.com/wZRaMrB.png');
  position: absolute;
  background-size: contain;
  width: 100%;
  z-index: 0;
  height: 100%;
  background-repeat: no-repeat;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='container'>
  <div class="top-image"></div>
</div>

【讨论】:

  • 哦,哇,非常感谢您的时间和帮助!我真的很感激!这解决了它,我永远不会自己得到它。
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多