jquery - CSS relative slide over absolute 悬停

标签 jquery html css

尝试制作一款用户无法在不弄乱屏幕的情况下调整屏幕大小/缩放屏幕的游戏。我正在处理 1 个大背景和上面的动态元素。目前元素没有缩放(它们缩放到浏览器窗口),这很好,但将它们放在这样的位置已经是一项艰巨的任务。

所以主要目标是,如果用户将鼠标悬停在图像 (div) 上,则 div 应该向上移动 X 像素。但是那些相对图像放在一个绝对框中(对窗口进行left和top css修改)

网上的研究说尝试负边距,但似乎没有用,边距确实是负的,但div只是保持原样。

我的问题的 JSFiddle:http://jsfiddle.net/uyx09byn/2/

解决这个问题的正确方法是什么,这是我当前保持纵横比的 jQuery 代码:

$(document).ready(function() 
{
    setSizes();
});


$(window).resize(function() 
{
    setSizes();
});

var widthMultiplier;
var heightMultiplier;

var normalWidth = 1920;
var normalHeight = 1080;
var offsets;
function setSizes()
{
    widthMultiplier = ($(window).height()/9*16) / normalWidth;
    heightMultiplier = $(window).height() / normalHeight;

    //Background Image
    $('#stadium').height($(window).height());
    $('#stadium').width($(window).height()/9*16);

    offsets = $('#stadium').offset();

    //playerspace
    $("#players").width(946 * widthMultiplier);
    $("#players").height(130 * heightMultiplier);

    $("#players").css("left", (((1920 * widthMultiplier) * 29.8 / 100) + offsets.left) + "px");
    $("#players").css("top", (((1080 * heightMultiplier) * 77.9 / 100) + offsets.top) + "px");


    //players
    $(".player").width(86 * widthMultiplier);
    $(".player").height(115 * heightMultiplier);
    $(".player").css("margin", (5.5 * heightMultiplier) + "px " + (4 * widthMultiplier) + "px " + (4 * heightMultiplier) + "px " + (4 * widthMultiplier) + "px");

    var lefttemp;
    $(".player").mouseover(function()
    {
        console.log("UP: " + this.id);
        $(this).css({marginTop: '-=15px'});
    });
    $(".player").mouseout(function()
    {
        console.log("DOWN: " + this.id);
        $(this).css({marginTop: '+=15px'});
    });
}   

最佳答案

这是一个更新的 fiddle :https://jsfiddle.net/uyx09byn/17/

你的问题的很大一部分是你试图用 Javascript 完成的很多事情用 CSS 完成得更好。

例如这些行:

$('#stadium').height($(window).height());
$('#stadium').width($(window).height()/9*16);

可以用这个 CSS 替换:

max-width: 1920px;
width: calc(100vh / 9 * 16);
max-height: 1080px;
height: 100vh;

“100vh”是视口(viewport)高度的 100%。

您尝试使用 Javascript 实现的缩放效果最好通过在相关元素上设置 padding-bottom: XX%; 来完成。应根据元素的宽度设置百分比以达到预期的比例。例如,如果您有 2 个元素,每个元素占据其父元素的 50%,如果您希望它们是正方形,则 padding-bottom 集将为 50%。

至于悬停时向上移动 X 像素,您只需要这样做:

.player:hover {
    backface-visibility: hidden;
    transform: translateY(-15px);
    transition: all .3s;
}

transform 将元素移动到所需的方向(在本例中,Y 轴向上 15 个像素),过渡使变换更平滑,backface-visibility: hidden ;触发转换/转换的硬件加速。

关于jquery - CSS relative slide over absolute 悬停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562801/

相关文章:

Jquery Cycle2 非图像 div 位置问题

css - CSP 样式-src : 'unsafe-inline' - is it worth it?

css - 在 sass 文件中的指南针助手中使用图像宽度

javascript - 如何遍历具有随机元素的表单

jquery - 如何让浏览器底部滚动到div底部

jquery - 启用文件下载控件和 View 控件中附件链接的拖放

javascript - 如何使 Bootstrap 模式宽度适应包含的图像

html - 法语前端开发?

javascript - 如果 text-indent 设置为百分比值,它用于计算的宽度是多少?

php - 是否可以使用 Javascript 读取 PHP session ?