运行多事件功能的更简洁的方式
Cleaner way to run multi-event function
我实际上是隐藏一个表单,直到用户将鼠标悬停在UI的号召性用语部分上,然后将表单滑入,同时滑出CTA。然后,如果用户单击表单,它将停留在屏幕上,直到焦点离开。否则,元素将在鼠标离开时返回到其原始状态。动画都是通过 CSS 过渡和转换来处理的,方法是使用 js 添加类。我已经让它工作正常,但是 js 对我来说感觉有点湿,所以我很好奇是否有更干净的方法来写这个?
function fireNewsletter(){
$('.newsletter-container').bind("mouseenter focus", function() {
$(".newsletter-cta").addClass('hiding');
$(".newsletter-form").addClass('showing');
});
$(".newsletter-container").bind("mouseleave", function(){
if ( ! $(".newsletter-input").is(":focus")) {
$(".newsletter-cta").removeClass('hiding');
$(".newsletter-form").removeClass('showing');
}
});
$(".newsletter-input").focusout(function(){
$(".newsletter-cta").removeClass('hiding');
$(".newsletter-form").removeClass('showing');
});
}
我可能只是将显示/隐藏逻辑移动到描述性命名的函数中并缓存对元素的引用。它不会使它更短,但它会表现得更好,阅读更容易。
function fireNewsletter(){
var cta = $(".newsletter-cta"),
form = $(".newsletter-form"),
input = $(".newsletter-input"),
container = $(".newsletter-container");
function show () {
cta.addClass('hiding');
form.addClass('showing');
}
function hide () {
if (!input.is(":focus")) {
cta.removeClass('hiding');
form.removeClass('showing');
}
}
container.bind("mouseenter", show);
container.bind("focus", show);
container.bind("mouseleave", hide);
input.bind("focusout", hide)
}
相关文章:
- 为什么这在IE中的工作方式与在Firefox中不同
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 使用javascript存储变量的最安全方式
- 以可优化的方式使用requirejs加载模板
- 在Highcharts中,我们可以通过任何方式在渲染图表之前获得plotWidth和plotHeight
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 为react组件传递道具的最佳方式
- 让Webpack管理Quirky AMD定义的最佳方式
- 链接承诺和传递价值的简洁方式
- JavaScript if语句的简洁方式
- 运行多事件功能的更简洁的方式
- 当下拉菜单中的项目发生变化时,以简洁的方式突出显示标签
- 写一个coffeescript函数,将json数组转换成我想要的格式,这是一种简洁的方式
- 以更简洁的方式声明javascript静态方法
- 简洁的方式获取所有输入字段的值
- 将事件附加到动态呈现字段的更简洁的方式
- 使用JQuery和Angular2进行多个ajax调用的简洁方式
- 定义Angular模板的更简洁的方式