如何在输入字段中有条件地添加“淡入黑色”蒙版?

吉尔赫姆·莱米(Guilherme Lemmi)

我正在实现一种设计,当文本内容达到输入框的最大可见宽度时,预计在输入的左侧会出现“淡入黑色”蒙版。

下面的图片更好地说明了我要完成的工作: 在此处输入图片说明

我已经用下面的代码实现了它的一部分:

var input = document.querySelector('#input');
var container = document.querySelector('.myInput');

input.addEventListener('keydown', function(e) {
  if (input.value.length > 12) {
    container.classList.add('faded');
  } else {
    container.classList.remove('faded');
  }
});
body {
  background: #000;
}

.myInput {
  position: relative;
}

.myInput input {
  font-family: "Trim", "NOW G", "Oscine";
  font-style: normal;
  font-weight: 500;
  font-size: 28px;
  background: #000;
  padding: 12px;
  color: #fff;
  box-sizing: border-box;
  margin: 0 0 0 10px;
  border: 1px solid #ccc;
  width: 200px;
}

.faded::before {
  display: block;
  background-image: -webkit-linear-gradient(left, black, rgba(0, 0, 0, 0));
  width: 20px;
  position: absolute;
  content: "";
  left: 15px;
  top: 1px;
  bottom: 1px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="myInput">
  <input id="input" placeholder="Search" />
</div>

我现在的问题是如何有条件地添加此掩码(即删除硬编码的12个字符的长度和输入硬编码的宽度),以及如何创建一个适用于所有宽度和所有文本大小的负责任的解决方案。

有任何想法吗?

科什

您可以找到,input是否溢出为

(input.offsetWidth < input.scrollWidth)

此外,我建议你听input的事件,而不是keydown给抓paste为好。

请参见下面的代码段:

document.addEventListener('input', function(e) {
  if (e.target.nodeName.toLowerCase() === 'input') {
    var input = e.target;
    var container = input.parentNode;
    if (input.offsetWidth < input.scrollWidth) {
      if (!container.classList.contains('faded')) {
        container.classList.add('faded');
        var cs = getComputedStyle(input);
        container.querySelector('.shadow').style.left = [
          'border-left-width', 'margin-left', 'padding-left'
        ].reduce(function(a, e) {
          return a += parseInt(cs[e])
        }, 0) + 'px';
      }
    } else {
      container.classList.remove('faded');
    }
  }
});
body {
  background: #000;
}

.myInput {
  position: relative;
  margin:1rem;
}

.myInput input {
  font: normal 500 28px "Trim", "NOW G", "Oscine";
  background: #000;
  padding: 12px;
  color: #fff;
  box-sizing: border-box;
  margin: 0 0 0 10px;
  border: 1px solid #ccc;
  width: 200px;
}

.faded .shadow {
  position: absolute;
  top: 1px;
  bottom: 1px;
  width: 20px;
  background-image: linear-gradient(90deg, #000, rgba(0, 0, 0, 0));
}

#input2 {
  margin-left: 20%;
  padding-left: 3em;
}
<div class="myInput">
  <input id="input" placeholder="Search" />
  <span class="shadow"></span>
</div>


<div class="myInput">
  <input id="input2" placeholder="Search" />
  <span class="shadow"></span>
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Vuejs中有条件地禁用输入字段

如何在Svelte中有条件地禁用字段?

如何在Oracle中有条件地插入?

如何在Excel中有条件地VLOOKUP?

如何在熊猫中有条件地求和

如何在Angular中有条件地渲染?

如何在Excel中有条件地匹配

如何在Javascript中有条件地拆分?

如何在有条件的js中有条件地应用标题

如何在akka-http中有条件地添加路由路径?

如何在Aurelia repeat.for中有条件地添加或删除CSS类?

如何在bash脚本中有条件地添加额外的参数?

如何在Angular 2中有条件地添加动画

如何在nginx配置中有条件地添加标题?

如何在Rails布局中有条件地向<body>添加类

如何在Vue应用程序的头中有条件地添加代码

如何在React.JS中有条件地添加路由?

如何在Vue中有条件地添加类?

如何在角度5中有条件地向表中添加行

如何有条件地将值分配给张量[蒙版损失函数]?

如何在有条件的组件上有条件地添加道具?

如果有值,如何在django admin中有条件地显示字段?

如何有条件地仅对angular中的特定字段有条件地添加mydatepicker disablescince prop

如何在React中有条件地将子组件添加到父组件?

如何在ngfor中向元素添加id和在ngfor中有条件地创建元素

如何在另一个组件中有条件地添加组件

如何在单个linq查询中有条件地添加where子句并过滤子级?

在React中有条件地添加HTML属性

在Vue中有条件地添加CSS类