javascript - 在鼠标 Y 上更改 2 种背景颜色 + 使 <p> 适应该新颜色

标签 javascript ruby sass mouseevent haml

我发现一段代码几乎可以实现我想要的功能,除了我希望它是水平的/基于鼠标 Y 而不是 X。现在我明白在 js 中 X 将更改为 Y,但我很难旋转div。

此外,如果我想在其上放置一些文本,我该如何做才能使背景更改影响文本颜色(因此,如果文本是黑色且背景的一半是黑色,以确保一旦黑色例如,背景覆盖文本、文本颜色更改为另一种颜色或反转?

此外,我还尝试在 js 中找出哪个部分决定了鼠标移动的响应能力,即,如何才能使颜色偏移不滞后于鼠标,但我无法弄清楚?

https://codepen.io/erutuf/pen/NJLwqV

哈姆

    #banner-wrapper.banner-wrapper
  .banner.design
    .banner-content

  .banner.dev
    .banner-content

SCSS

   body {
  margin: 0;
  padding: 0;

  .banner-wrapper {
    position: relative;
    width: 100%;
    height: 400px;
    overflow: hidden; background:red;
  }

  .banner {
    position: absolute;
    overflow: hidden;

    &.dev {
      margin-left: -500px;
      width: calc(50vw + 500px);
      .banner-content {
        margin-left: 500px; background:black;
      }
    }
    .banner-content {
      height: 400px;
    }
    img {
      width: 100vw;
    }
  }
}

js

document.addEventListener('DOMContentLoaded', function(){
    let banner = document.getElementById('banner-wrapper');
    let devLayer = banner.querySelector('.dev');
    let delta = 0;

    banner.addEventListener('mousemove', function(e){
        delta = (e.clientX - window.innerWidth / 2) * 0.5;
        devLayer.style.width = e.clientX + 500 + delta + 'px';
    });
})

最佳答案

你可以玩 JS + CSS。以下代码可以作为您的起点:)。

顺便说一句,我正在改编您链接中的代码 https://codepen.io/erutuf/pen/NJLwqV

document.addEventListener("DOMContentLoaded", function(){
    let banner = document.getElementById("banner-wrapper");
    let devLayer = banner.querySelector(".dev");
    let delta = 0;
    // play with div's height
    banner.addEventListener("mousemove", function(e){
        delta = (e.clientY - window.innerHeight / 2) * 0.5;
        devLayer.style.height = e.clientY + delta + "px";
    });
})
<div class="banner-wrapper" id="banner-wrapper">
  <div class="banner design">
    <div class="banner-content">BANNER TEXT</div>
  </div>
  <div class="banner dev">
    <div class="banner-content"></div>
  </div>
</div>

<style type="text/css">
body {
  margin: 0;
  padding: 0;
}
body .banner-wrapper {
  position: relative;
  width: 100%;
  height: 200px;
  overflow: hidden;
  background: red;
}
body .banner {
  position: absolute;
  overflow: hidden;
}
body .banner.dev {
  width: 100%;
  /* play with responsiveness here. note that 0.1 is more responsive than 0.5. more info : https://www.w3schools.com/css/css3_transitions.asp */
  -webkit-transition: height 0.2s linear;
  transition: height 0.2s ease;
}
body .banner.dev .banner-content {
  background: black;
}
body .banner .banner-content {
  height: 400px;
}
body .banner img {
  width: 100%;
}
.banner.design {
    margin-top: -25px;
    height: 50px;
    top: 50%;
    font-size: 50px;
	/* set color & mix-blend-mode for text color vs background color effect. more info : https://css-tricks.com/methods-contrasting-text-backgrounds/ */
    mix-blend-mode: difference;
    color: #fff;
    z-index: 1;
    margin-left: -175px;
    left: 50%;
    width: 350px;
}

</style>

关于javascript - 在鼠标 Y 上更改 2 种背景颜色 + 使 <p> 适应该新颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251905/

相关文章:

javascript - 在数组中的偶数之间插入连字符

ruby - Sidekiq 在 Hanami 应用程序上找不到 worker 类别

javascript - Webpack - scss/css 模块样式未在产品中应用

css - 如何从 CSS3 动画访问其他类

javascript - 如何使用 JavaScript API 从 PowerPoint 幻灯片获取元素信息?

javascript - 当 ng-click 不可用时在悬停时显示禁止图标

ruby - ruby 方法定义中关键字参数的哈希上的 splat 运算符

css - Ionic 4 透明 ion-content

javascript - 使用 javascript 将元素从隐藏框架解析为可见框架

ruby-on-rails - 来自 rails 的带有 Sinatra : what is the equivalent of a . js.erb 的 Ruby?