当用户在输入字段事件中输入内容时,为该字段事件添加动画占位符
Animate placeholder for an input field event when user inputs something there
我见过这样的演示。
但这是关于创建一个新元素。
parent().append("<span>" + $input.attr('placeholder') + "</span>");
有没有办法在不附加新元素的情况下对占位符在input event
上的消失进行动画处理?
$("input[placeholder]").each(function () {
var $input = $(this);
// wrap the input with a label
$input.wrap("<label class='placeholder'>");
// append a span to the label
$input.parent().append("<span>" + $input.attr('placeholder') + "</span>");
// and finally remove the placeholder attribute
$input.attr('placeholder', '');
}).keyup(function () {
var $input = $(this);
// toogle hidden class on span, according to whether there is content or not
if ($input.val() === "") {
$input.next("span").removeClass("hidden");
} else {
$input.next("span").addClass("hidden");
}
});
label.placeholder {
position: relative;
}
label.placeholder span {
opacity: 1;
-webkit-transition: opacity 250ms;
-moz-transition: opacity 250ms;
-o-transition: opacity 250ms;
-ms-transition: opacity 250ms;
transition: opacity 250ms;
position: absolute;
left: 5px;
top: 2px;
font-size: 12px;
color: grey;
}
label.placeholder span.hidden {
opacity: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" placeholder="the placeholder">
有没有办法在不附加新元素的情况下对占位符在输入事件上的消失进行动画处理?
由于默认浏览器伪元素(即 ::-webkit-input-placeholder
/::-moz-placeholder
、:-ms-input-placeholder
)很难跨浏览器设置样式,因此您可以使用:before
或:after
伪元素代替追加的span
元素。但是,由于伪元素无法添加到input
元素中,因此您仍然需要包装input
元素。
更新的示例
伪元素绝对相对于父元素定位,以便覆盖父元素。伪元素的content
值基于包装元素的自定义data-*
属性data-placeholder
,这是使用content
值attr(data-placeholder)
实现的。
我还稍微简化了你的jQuery:
$('input[placeholder]').each(function () {
$(this).wrap('<label class="placeholder" data-placeholder="' + this.placeholder + '">').attr('placeholder', '');
}).on('keyup', function () {
$(this).parent().toggleClass('hidden', this.value !== '');
});
label.placeholder {
position: relative;
}
label.placeholder:after {
content: attr(data-placeholder);
position: absolute;
top:0; right: 0;
bottom: 0; left: 0;
padding: 2px;
font-size: 12px;
color: grey;
cursor: text;
transition: opacity 250ms;
}
label.hidden.placeholder:after {
opacity: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" placeholder="the placeholder"/>
对于长placeholder
值,您还可以添加以下内容:
更新的示例
label.placeholder:after {
/* .. */
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
相关文章:
- 是否可以为HTML5输入滑块触发oninput事件
- 使用onkeyup JS事件检查输入的值是否唯一
- 访问代码生成的输入元素上的keyup事件
- 无线电输入更改的jQuery事件未启动
- JS事件未更改输入禁用属性
- 在表单中的输入字段上提交事件
- 是否可以在数字输入框中的小按钮中添加事件侦听器
- 如何获取按钮点击事件输入的当前值
- 在放置目标时,输入并离开自定义事件
- 为什么不是't;输入“;此处触发事件
- 替代输入:基于按钮点击事件的文本更改处理程序
- 检查 jQuery 中的递增-递减事件输入类型编号
- Ng-model绑定触摸事件输入的值失败
- 从onkeyup事件输入触发JS函数
- 用于关键事件输入验证的Javascript正则表达式故障排除帮助
- Jquery在点击事件输入
- 如何检测javascript事件输入的变化
- 更改事件输入字符
- 触发多个事件/输入字段的功能并计算它们
- 组合组件上的onBlur事件(输入+按钮)