[成功]在element-ui表单选择器组件实现鼠标移入自动展开
作者:V君 发布于:2017-12-20 16:22 Wednesday 分类:挖坑经验
前些天一直在做服务器后端, 最近才开始实现界面,
自从被猫同事推荐了基于 VUE 的 element-ui 之后发现: 原来这样开发前端也挺舒服的.
只是 element-ui 的实现细节仍然不到位, 比如选择器或级联下拉不支持鼠标移入就自动展开.
官方 hub 上的 issues(4676,4682) 貌似也没人理,于是自己补了一下刀.
像这样:
给需要自动展开的 el-select 和 el-cascader 加上 autoExpand 属性,
在DOM创建之后(比如对话框弹出事件)调用即可.
可以适当修改自动展开的延迟时间让操作更友好.
function patchElemenUiDropdown() { setTimeout(() => { var delayEnter = 300; var delayOut = 200; var namespace = "28ae9795d1214b049aa90229e37b9c7f"; function isBind(element, eventName) { var bindedEvents = $._data(element, "events"); return bindedEvents && bindedEvents[eventName] && Enumerable.From(bindedEvents[eventName]) .Any(p => p.namespace === namespace); } $('span.el-cascader[autoExpand]').each((idx, elmx) => { if (isBind(elmx, 'mouseover')) return; (function (elm) { var jqdom, jqdd, tmrIn, tmrOut; var prepOut = () => { clearTimeout(tmrOut); tmrOut = setTimeout(() => { if (jqdom.hasClass("is-opened")) { jqdom.click(); jqdd.off("mouseleave." + namespace); } }, delayOut); }; $(elm).on("mouseenter." + namespace, mee => { clearTimeout(tmrOut); $(elm).on("mouseleave." + namespace + ".in", () => { clearTimeout(tmrIn); $(elm).off("mouseleave." + namespace + ".in"); }); $(elm).on("click." + namespace + ".in", () => { clearTimeout(tmrIn); $(elm).off("click." + namespace + ".in"); }); tmrIn = setTimeout(() => { jqdom = $(mee.delegateTarget); if (!jqdom.hasClass("is-opened")) { jqdom.click(); setTimeout(() => { var jr = $("div.el-cascader-menus"); var dd = jr[jr.length - 1]; if (isBind(dd, "mouseout")) return; jqdd = $(dd); jqdd.on("mouseleave." + namespace, prepOut);jqdd.on("mouseenter." + namespace, () =>
clearTimeout(tmrOut));
}, 0); } if (!isBind(elm, 'mouseout')) jqdom.on("mouseleave." + namespace, prepOut); }, delayEnter); }); })(elmx); }); $('div.el-select[autoExpand]').each((idx, elmx) => { if (isBind(elmx, 'mouseover')) return; (function (elm) { var jqdom, jqclk, jqdd, tmrIn, tmrOut; var prepOut = () => { clearTimeout(tmrOut); tmrOut = setTimeout(() => { if (jqdom.find('div.el-input').hasClass("is-focus")) { jqclk.click(); jqdd.off("mouseleave." + namespace); } }, delayOut); }; $(elm).on("mouseenter." + namespace, mee => { clearTimeout(tmrOut); $(elm).on("mouseleave." + namespace + ".in", () => { clearTimeout(tmrIn); $(elm).off("mouseleave." + namespace + ".in"); }); $(elm).on("click." + namespace + ".in", () => { clearTimeout(tmrIn); $(elm).off("click." + namespace + ".in"); }); tmrIn = setTimeout(() => { jqdom = $(mee.delegateTarget); jqclk = $(jqdom.find('div.el-select__tags')[0]); if (!jqdom.find('div.el-input').hasClass("is-focus")) { jqclk.click(); setTimeout(() => { var jr = $("div.el-select-dropdown"); var dd = jr[jr.length - 1]; if (isBind(dd, "mouseout")) return; jqdd = $(dd); jqdd.on("mouseleave." + namespace, prepOut); jqdd.on("mouseenter." + namespace, () => clearTimeout(tmrOut)); }, 0); } if (!isBind(elm, 'mouseout')) jqdom.on("mouseleave." + namespace, prepOut); }, delayEnter); }); })(elmx); }); }, 0); // End setTimeOut}
标签: javascript Web技术 VUE
blogger
Google Web Translator
热门日志
随机日志
最新日志
最新评论
- V君
@Quartz:(出现)... - Quartz
怎么不见人了呢... - V君
@Soar:DHCP 协议相... - V君
@Soar:当然是非... - Soar
@V君:谢谢 有空... - Soar
搞一个 1230v3+B85... - V君
@Soar:另外,也可... - V君
@Soar:iscsi服务端... - Soar
难怪这么卡,尤其... - Soar
clone了源码,提示...
分类
存档
- 2024年5月(1)
- 2023年7月(1)
- 2023年5月(1)
- 2022年11月(1)
- 2022年10月(1)
- 2022年9月(1)
- 2022年8月(1)
- 2022年7月(1)
- 2022年6月(1)
- 2022年5月(2)
- 2022年4月(1)
- 2022年3月(1)
- 2022年2月(1)
- 2022年1月(1)
- 2021年12月(1)
- 2021年11月(1)
- 2021年10月(1)
- 2021年9月(1)
- 2021年8月(1)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(1)
- 2021年4月(1)
- 2021年3月(1)
- 2021年2月(1)
- 2021年1月(1)
- 2020年12月(1)
- 2020年11月(1)
- 2020年10月(2)
- 2020年9月(1)
- 2020年8月(1)
- 2020年7月(1)
- 2020年6月(1)
- 2020年5月(1)
- 2020年4月(2)
- 2020年3月(3)
- 2020年2月(1)
- 2020年1月(1)
- 2019年12月(1)
- 2019年11月(1)
- 2019年10月(1)
- 2019年9月(1)
- 2019年8月(2)
- 2019年7月(1)
- 2019年6月(1)
- 2019年5月(1)
- 2019年4月(1)
- 2019年3月(1)
- 2019年2月(1)
- 2019年1月(2)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(3)
- 2018年9月(4)
- 2018年8月(6)
- 2018年7月(4)
- 2018年6月(1)
- 2018年5月(2)
- 2018年4月(2)
- 2018年3月(3)
- 2018年2月(1)
- 2018年1月(1)
- 2017年12月(1)
- 2017年10月(2)
- 2017年9月(1)
- 2017年8月(2)
- 2017年7月(1)
- 2017年6月(5)
- 2017年5月(2)
- 2017年4月(2)
- 2017年3月(3)
- 2017年2月(2)
- 2017年1月(2)
- 2016年12月(3)
- 2016年11月(2)
- 2016年10月(3)
- 2016年9月(4)
- 2016年8月(2)
- 2016年7月(4)
- 2016年6月(3)
- 2016年5月(1)
- 2016年4月(4)
- 2016年3月(3)
- 2016年2月(1)
- 2016年1月(5)
- 2015年12月(4)
- 2015年11月(5)
- 2015年10月(1)
- 2015年9月(6)
- 2015年8月(4)
- 2015年7月(1)
- 2015年6月(6)
- 2015年5月(3)
- 2015年4月(3)
- 2015年3月(2)
- 2015年2月(1)
- 2015年1月(3)
- 2014年12月(1)
- 2014年11月(1)
- 2014年10月(1)
- 2014年9月(3)
- 2014年8月(1)
- 2014年7月(1)
- 2014年6月(1)
- 2014年5月(3)
- 2014年4月(1)
- 2014年3月(1)
- 2014年2月(2)
- 2014年1月(1)
- 2013年12月(2)
- 2013年11月(2)
- 2013年10月(1)
- 2013年9月(3)
- 2013年8月(14)
- 2013年7月(7)
- 2013年4月(1)
- 2013年3月(4)
- 2013年2月(6)
- 2013年1月(6)
- 2012年12月(8)
- 2012年11月(6)
发表评论: