vant
Version:
Mobile UI Components built on Vue
78 lines (66 loc) • 2.03 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { createNamespace } from '../utils';
import { ChildrenMixin } from '../mixins/relation';
var _createNamespace = createNamespace('swipe-item'),
createComponent = _createNamespace[0],
bem = _createNamespace[1];
export default createComponent({
mixins: [ChildrenMixin('vanSwipe')],
data: function data() {
return {
offset: 0,
inited: false,
mounted: false
};
},
mounted: function mounted() {
var _this = this;
this.$nextTick(function () {
_this.mounted = true;
});
},
computed: {
style: function style() {
var style = {};
var _this$parent = this.parent,
size = _this$parent.size,
vertical = _this$parent.vertical;
if (size) {
style[vertical ? 'height' : 'width'] = size + "px";
}
if (this.offset) {
style.transform = "translate" + (vertical ? 'Y' : 'X') + "(" + this.offset + "px)";
}
return style;
},
shouldRender: function shouldRender() {
var index = this.index,
inited = this.inited,
parent = this.parent,
mounted = this.mounted;
if (!parent.lazyRender || inited) {
return true;
} // wait for all item to mount, so we can get the exact count
if (!mounted) {
return false;
}
var active = parent.activeIndicator;
var maxActive = parent.count - 1;
var prevActive = active === 0 && parent.loop ? maxActive : active - 1;
var nextActive = active === maxActive && parent.loop ? 0 : active + 1;
var shouldRender = index === active || index === prevActive || index === nextActive;
if (shouldRender) {
this.inited = true;
}
return shouldRender;
}
},
render: function render() {
var h = arguments[0];
return h("div", {
"class": bem(),
"style": this.style,
"on": _extends({}, this.$listeners)
}, [this.shouldRender && this.slots()]);
}
});