javascript - 将 Div 放置在背景图像顶部(覆盖/响应式)

标签 javascript jquery html css background

我正在尝试将多个 div 放置在背景图像的顶部,以便产生很酷的效果。主要问题是网站是响应式的,图像也是响应式的 - 它是 background-size: cover ,这使得在查看更大/更小的屏幕时很难将叠加层准确地保持在需要的位置。我创建了一个粗略的 JSFiddle来表达我的意思。在此示例中,我尝试将动画框覆盖在考拉的眼睛上。

我不确定是否更容易获得我想要覆盖的位置的坐标并使用它,或者我是否需要使用窗口偏移。因为它也是居中的,并且当缩小时它会改变 position-y 并且我不确定如何跟踪它作为背景图像。

我真正希望的是了解如何跟踪此背景图像上坐标的确切位置,或为我指明解决此问题的不同方向。

#koala     { background: url( 'http://i.imgur.com/1xZ17bk.jpg' ) no-repeat center; background-size: cover; position: relative; width: 100%; height: 768px; }

#leftEye,  
#rightEye   { width: 20px; height: 20px; background-color: #F00; position: absolute; 
    -webkit-animation: rotating 2s linear infinite;
       -moz-animation: rotating 2s linear infinite;
         -o-animation: rotating 2s linear infinite;
            animation: rotating 2s linear infinite;
}
#leftEye    { top: 48%; left: 37%; }
#rightEye   { top: 59%; right: 35%; }

@-webkit-keyframes rotating {
    from{
        -webkit-transform: rotate(0deg);
           -moz-transform: rotate(0deg);
            -ms-transform: rotate(0deg);
             -o-transform: rotate(0deg);
                transform: rotate(0deg);
    }
    to{
        -webkit-transform: rotate(360deg);
           -moz-transform: rotate(360deg);
            -ms-transform: rotate(360deg);
             -o-transform: rotate(360deg);
                transform: rotate(360deg);
    }
}

@-moz-keyframes rotating {
    from{
        -webkit-transform: rotate(0deg);
           -moz-transform: rotate(0deg);
            -ms-transform: rotate(0deg);
             -o-transform: rotate(0deg);
                transform: rotate(0deg);
    }
    to{
        -webkit-transform: rotate(360deg);
           -moz-transform: rotate(360deg);
            -ms-transform: rotate(360deg);
             -o-transform: rotate(360deg);
                transform: rotate(360deg);
    }
}

@-ms-keyframes rotating {
    from{
        -webkit-transform: rotate(0deg);
           -moz-transform: rotate(0deg);
            -ms-transform: rotate(0deg);
             -o-transform: rotate(0deg);
                transform: rotate(0deg);
    }
    to{
        -webkit-transform: rotate(360deg);
           -moz-transform: rotate(360deg);
            -ms-transform: rotate(360deg);
             -o-transform: rotate(360deg);
                transform: rotate(360deg);
    }
}

@-o-keyframes rotating {
    from{
        -webkit-transform: rotate(0deg);
           -moz-transform: rotate(0deg);
            -ms-transform: rotate(0deg);
             -o-transform: rotate(0deg);
                transform: rotate(0deg);
    }
    to{
        -webkit-transform: rotate(360deg);
           -moz-transform: rotate(360deg);
            -ms-transform: rotate(360deg);
             -o-transform: rotate(360deg);
                transform: rotate(360deg);
    }
}

@keyframes rotating {
    from{
        -webkit-transform: rotate(0deg);
           -moz-transform: rotate(0deg);
            -ms-transform: rotate(0deg);
             -o-transform: rotate(0deg);
                transform: rotate(0deg);
    }
    to{
        -webkit-transform: rotate(360deg);
           -moz-transform: rotate(360deg);
            -ms-transform: rotate(360deg);
             -o-transform: rotate(360deg);
                transform: rotate(360deg);
    }
}

.notneeded { width: 100%; height: 50px; background-color: beige; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="header" class="notneeded"></div>
<div id="koala">
  <div id="leftEye"></div>
  <div id="rightEye"></div>
</div>
<div id="footer" class="notneeded"></div>

最佳答案

一个更简单的解决方案是利用窗口宽度的变化来发挥自己的优势。因此,通常情况下,您会测量窗口大小的变化,并从眼睛的当前位置中减去该变化。但是,由于您的背景居中,因此您需要稍微改变一下 - 采用旧窗口位置,减去新窗口位置,并将结果除以二。

我已经用 jQuery 完成了这个。

var leftEye = $('#leftEye');
var rightEye = $('#rightEye');
var oldLeftEyePos = leftEye.position().left;
var oldRightEyePos = rightEye.position().left;
var oldWindowWidth = $(window).width();

$(window).resize(function(){
  var newWindowWidth = $(window).width();

    leftEye.css({
      left: oldLeftEyePos - ((oldWindowWidth - newWindowWidth) / 2)
    });

    rightEye.css({
      left: oldRightEyePos - ((oldWindowWidth - newWindowWidth) / 2)
    });
});

这是一个更新的 jsfiddle 示例;

http://jsfiddle.net/joe5hjr3/10/

免责声明:这并不完美。它缩小得很大,但是当你超过一定的尺寸时,它们开始相互靠近 - 但希望这足以让你走上正确的轨道。此外,它对于缩小效果不太好,但对于放大效果很好。

关于javascript - 将 Div 放置在背景图像顶部(覆盖/响应式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32828916/

相关文章:

html - html、css、bootstrap 中的 2 或 3 行边框

javascript - 如果填写字段=数组则为JAVASCRIPT

image - HTML5 沿路径移动图像

javascript - 如何在 JavaScript 中实现原子操作(并发模型)?

Javascript数组推送和显示

javascript - 如果 document.cookie 是一个字符串,为什么 document.cookie = ""不删除所有相关站点的 cookie?

javascript - 用于查看模板的 Backbone 集合

javascript - 如何获取对象值和 id 作为选择框的选项使用 javascript 或 jquery

javascript - 撤消 JavaScript 中的所有鼠标事件处理程序?

jquery - 使用带有 jquery 的 css 选择器在单个标记中选择两个 html 元素之一