Professional Documents
Culture Documents
Ui Collapse
Ui Collapse
var $ = require('jquery');
var UI = require('./core');
/**
* @via https://github.com/twbs/bootstrap/blob/master/js/collapse.js
* @copyright (c) 2011-2014 Twitter, Inc
* @license The MIT License
*/
if (this.options.parent) {
this.$parent = $(this.options.parent);
}
if (this.options.toggle) {
this.toggle();
}
};
Collapse.DEFAULTS = {
toggle: true
};
Collapse.prototype.open = function() {
if (this.transitioning || this.$element.hasClass('am-in')) {
return;
}
if (startEvent.isDefaultPrevented()) {
return;
}
Plugin.call(actives, 'close');
this.$element
.removeClass('am-collapse')
.addClass('am-collapsing').height(0);
this.transitioning = 1;
if (!UI.support.transition) {
return complete.call(this);
}
this.$element
.one(UI.support.transition.end, $.proxy(complete, this))
.emulateTransitionEnd(300)
.css({height: scrollHeight}); // 当折叠的容器有 padding 时,如果用 height() 只能设置
内容的宽度
};
Collapse.prototype.close = function() {
if (this.transitioning || !this.$element.hasClass('am-in')) {
return;
}
if (startEvent.isDefaultPrevented()) {
return;
}
this.$element.height(this.$element.height()).redraw();
this.$element.addClass('am-collapsing').
removeClass('am-collapse am-in');
this.transitioning = 1;
if (!UI.support.transition) {
return complete.call(this);
}
this.$element.height(0)
.one(UI.support.transition.end, $.proxy(complete, this))
.emulateTransitionEnd(300);
};
Collapse.prototype.toggle = function() {
this[this.$element.hasClass('am-in') ? 'close' : 'open']();
};
// Collapse Plugin
function Plugin(option) {
return this.each(function() {
var $this = $(this);
var data = $this.data('amui.collapse');
var options = $.extend({}, Collapse.DEFAULTS,
UI.utils.options($this.attr('data-am-collapse')),
typeof option == 'object' && option);
if (!data) {
$this.data('amui.collapse', (data = new Collapse(this, options)));
}
$.fn.collapse = Plugin;
// Init code
$(document).on('click.collapse.amui.data-api', '[data-am-collapse]',
function(e) {
var href;
var $this = $(this);
var options = UI.utils.options($this.attr('data-am-collapse'));
var target = options.target ||
e.preventDefault() ||
(href = $this.attr('href')) &&
href.replace(/.*(?=#[^\s]+$)/, '');
var $target = $(target);
var data = $target.data('amui.collapse');
var option = data ? 'toggle' : options;
var parent = options.parent;
var $parent = parent && $(parent);
if (!data || !data.transitioning) {
if ($parent) {
// '[data-am-collapse*="{parent: \'' + parent + '"]
$parent.find('[data-am-collapse]').not($this).addClass('am-collapsed');
}
$this[$target.hasClass('am-in') ?
'addClass' : 'removeClass']('am-collapsed');
}
Plugin.call($target, option);
});
module.exports = UI.collapse = Collapse;