Ответ 1
Вы можете использовать функцию jQuery fadeTo()
. Дополнительную информацию можно найти по ссылке ниже.
http://docs.jquery.com/Effects/fadeTo#speedopacitycallback
У меня есть диалоговое окно интерфейса JQuery, которое является модальным и имеет черный фон с непрозрачностью 50%. Возможно ли, чтобы фоновая непрозрачность исчезла с 0% до 50%? Если да, то как? Потому что в настоящее время это похоже на то, как получить удар прямо на лицо, когда отображается диалог.
FWIW, это CSS, который я использую на данный момент:
.ui-widget-overlay {
background: black;
opacity: 0.5;
filter: alpha(opacity = 50);
position: absolute;
top: 0;
left: 0;
}
Вы можете использовать функцию jQuery fadeTo()
. Дополнительную информацию можно найти по ссылке ниже.
http://docs.jquery.com/Effects/fadeTo#speedopacitycallback
Вы также можете добавить это в fadeIn modal:
$(loginForm).dialog({
resizable: false,
open: function(){
$('.ui-widget-overlay').hide().fadeIn();
},
show: "fade",
hide: "fade"
});
Надеюсь, что это поможет:)
Это расширение ответа Лиама Поттера. Его работы отлично подходят для постепенного исчезновения, но не справляются с этим. Я обнаружил, что это самый простой способ сделать задний фон также исчезающим:
beforeClose: function(){
$('.ui-widget-overlay:first')
.clone()
.appendTo('body')
.show()
.fadeOut(400, function(){
$(this).remove();
})
;
}
Вы не можете сделать это в методе "закрыть", потому что jQuery уже удалил контейнер ".ui-widget-overlay", однако, клонируя его, чтобы просто вымыться, вы можете обойти их удаление и по-прежнему использовать все стили по умолчанию.
Я знаю, что это старый вопрос, но я наткнулся на него только сейчас в поиске и чувствую, что могу помочь другим людям.
Это может быть улучшено. Я уверен, но это будет исчезать и выходить из вашего наложения при использовании диалогового окна JQuery UI.
open: function(){
$('.ui-widget-overlay').hide().fadeIn();
},
beforeClose: function(){
$('.ui-widget-overlay').remove();
$("<div />", {
'class':'ui-widget-overlay'
}).css(
{
height: $("body").outerHeight(),
width: $("body").outerWidth(),
zIndex: 1001
}
).appendTo("body").fadeOut(function(){
$(this).remove();
});
}
Просто небольшое улучшение ответа Лиама Поттера. Если вы хотите, чтобы наложение было полноэкранным, вы можете изменить его код, чтобы использовать $(document).height()
и $(document).width()
вместо тела, потому что последний будет измеряться меньше видимой области.
open: function(){
$('.ui-widget-overlay').hide().fadeIn();
},
beforeClose: function(){
$('.ui-widget-overlay').remove();
$("<div />", {
'class':'ui-widget-overlay'
}).css({
height: $(document).height(),
width: $(document).width(),
zIndex: 1001
}).appendTo("body").fadeOut(function(){
$(this).remove();
});
}
Вы можете создать свой собственный виджет, расширяющий $.ui.dialog, чтобы добавить оверлейное шоу и скрыть анимацию с точной конфигурацией, используя опцию.
Другим недостатком функциональности закрытия диалога путем щелчка по наложению также легко добавляется:
в каком-то файле, скажем, jquery-ui.fsrc.dialog.js:
(function( $, undefined ) {
$.widget('fsrc.fsrc_dialog', $.ui.dialog, {
open: function() {
// some helpful vars
var self = this,
options = self.options;
// call parent method - it will create overlay and save it in self.overlay variable
var ret = $.ui.dialog.prototype.open.apply(this, arguments);
if (options.showOverlay) {
// immediately hide and animate overlay
// kind a hack, but jquery ui developers left no better way
self.overlay.$el.hide().show(options.showOverlay)
}
if (options.closeOnOverlay) {
// close dialog on click on overlay
self.overlay.$el.click(function() {
self.close();
})
}
return ret;
},
close: function(event) {
var self = this,
options = self.options;
if (options.hideOverlay) {
// save and unset self.overlay, so it will not be destroyed by parent function during animation
var overlay = self.overlay
self.overlay = null;
overlay.$el.hide(options.hideOverlay, function() {
// destroy overlay after animation as parent would do
overlay.destroy();
})
}
// call parent method
var ret = $.ui.dialog.prototype.close.apply(this, arguments);
return ret;
}
});
}(jQuery));
На странице:
<script src='/js/jquery-ui.fsrc.dialog.js' type='text/javascript'></script>
<script type="text/javascript">
<!--
jQuery(document).ready(function(){
jQuery('#show').click(function(){
jQuery('#order_form_container').fsrc_dialog({
modal: true,
closeOnOverlay: true,
show: {effect: "fade", duration: 500},
showOverlay: {effect: "fade", duration: 500},
hide: {effect: "fade", duration: 300},
hideOverlay: {effect: "fade", duration: 300},
});
})
})
-->
</script>`
Я назвал пространство имен, виджет и параметры в свою пользу.
Протестировано jquery1.7.2, jquery-ui1.8.19, IE9, ff11, chrome18.0.1025.168m, opera11.61
$('.ui-widget-overlay').hide().fadeIn();
Этот эффект имеет значение для IE, поскольку непрозрачность не будет работать после исчезновения в
Мне пришлось изменить ответ от Сэма Барнса, чтобы он работал (я также выбрал функцию щелчка диалога в функции $(document).ready):
<script type='text/javascript'>
$(".dialog").click(function(){
$('.ui-widget-overlay').hide().fadeIn();
$("div.dialog").dialog({
resizable: false,
close: function(){
$('.ui-widget-overlay').hide();
},
show: "fade",
hide: "fade"
});
$(".ui-dialog").fadeIn();
return false;
});
$(".ui-widget-overlay").click(function(){
$(this).hide();
$(".ui-dialog").hide();
});
</script>
<style>
.ui-widget-overlay {
background: black;
opacity: 0.5;
filter: alpha(opacity = 50);
position: absolute;
top: 0;
left: 0;
}
</style>
<div class='ui-widget-overlay'></div>
<div class='dialog' title='Heading!'>Some Message!</div>
Вы можете добавить то, что скрывается при нажатии кнопки escape, добавив:
$(document).keyup(function(e) {
if (e.keyCode == 27) {
$(".ui-dialog").hide();
$('.ui-widget-overlay').hide();
}
});