javascript - 防止 select2-dropdown 在关闭时分离以对其进行动画处理
问题描述
我看到很多线程如何在打开/关闭时为 select2 下拉菜单设置动画,但我找不到任何可行的方法来设置它的动画。我想要 slideDown/slideUp select2 下拉菜单,而不是基本上显示它。使用select2:opening
andselect2:open
事件,滑动事件有效,但在关闭/关闭时不起作用,因此我试图弄清楚并编辑核心文件以使技巧起作用,但我知道编辑核心文件是一个不好的选择。
$('#select').select2({
width: "100%",
allowClear: false
}).on('select2:opening', function () {
$(this).on("select2:open", function () {
$('.select2-dropdown').slideDown(500);
});
//$(this).on("select2:closing", function () {
//e.preventDefault();
//$('.select2-dropdown').slideUp(1000);
//});
});
jsfiddle Arround 4327 行,我已经替换
AttachBody.prototype._hideDropdown = function (decorated) {
this.$dropdownContainer.detach();
};
至 :
AttachBody.prototype._hideDropdown = function (decorated) {
//this.$dropdownContainer.detach();
var $this = this;
$('.select2-dropdown').slideUp(500, function(){
$this.$dropdownContainer.detach();
})
};
它可以工作,但我确信有更好的方法可以在不编辑核心文件的情况下完成这个技巧。
任何帮助,将不胜感激
解决方案
slideDown
要在下拉打开时设置动画,您可以使用:
.on('select2:open', function(e) {
$('.select2-dropdown').hide();
setTimeout(function() {
jQuery('.select2-dropdown').slideDown(1000);
});
.on
初始化select2-dropdown
. _
$('.select2-dropdown').hide();
用于防止下拉菜单突然加载,添加setTimeout
用于为 slideDown 设置动画。
要在下拉关闭时设置动画slideUp
,您需要使用:
.on('select2:closing', function(e) {
e.preventDefault();
setTimeout(function() {
jQuery('.select2-dropdown').slideUp(1000, function() {
close();
});
}, 0);
e.preventDefault()用于阻止事件的默认操作,使其不会被触发。这是突然关闭。对于 setTimeout,它几乎与打开相同,不同之处在于slideUp
而不是slideDown
和close();
$("#select").select2('destroy');
正在用于销毁关闭后卡住的现有选择,您可以在下面的jsFiddle 片段或@Islam Elshobokshy 答案中看到。
并init();
用于重新初始化您的select2-dropdown
. 请参阅片段以获取清晰的示例:
jQuery(document).ready(function() {
init();
})
function init() {
$('#select').select2({
width: "100%",
allowClear: false
}).on('select2:open', function(e) {
$('.select2-dropdown').hide();
setTimeout(function() {
jQuery('.select2-dropdown').slideDown(1000);
});
}).on('select2:closing', function(e) {
e.preventDefault();
setTimeout(function() {
jQuery('.select2-dropdown').slideUp(1000, function() {
close();
});
}, 0);
});
}
function close() {
$("#select").select2('destroy');
init();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<select id="select">
<option value="1">Value 1</option>
<option value="1">Value 2</option>
<option value="1">Value 3</option>
<option value="1">Value 4</option>
<option value="1">Value 5</option>
<option value="1">Value 61</option>
<option value="1">Value 7</option>
<option value="1">Value 8</option>
</select>
推荐阅读
- anaconda - Anaconda Cloud 上显示的最新版本
- testing - Groovy 元类覆盖 java.time.Year 静态方法 now() 但生产代码在运行时未使用 now() 的覆盖行为
- android - Android:不关闭 ExecutorService 会有问题吗?
- javascript - 在 NextJS 中将字符串 HTML 注入头部不起作用
- httpresponse - 防止缓存截断的 HTTP 响应
- javascript - 单击播放列表链接以在音频播放器上开始和停止音乐
- python - Plotly Dash 和调用多处理代码的回调
- azure-active-directory - 添加用户在 Azure Active Directory 新创建的应用程序上淡出
- python - 是否可以获得 ipywidget 的当前位置?
- java - ConditionalOnMissingBean 结合 EnableJpaRepositories