index.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var component_1 = require('./../common/component.js');
  4. var utils_1 = require('./../common/utils.js');
  5. var DEFAULT_DURATION = 200;
  6. component_1.VantComponent({
  7. classes: ['active-class'],
  8. props: {
  9. valueKey: String,
  10. className: String,
  11. itemHeight: Number,
  12. visibleItemCount: Number,
  13. initialOptions: {
  14. type: Array,
  15. value: []
  16. },
  17. defaultIndex: {
  18. type: Number,
  19. value: 0
  20. }
  21. },
  22. data: {
  23. startY: 0,
  24. offset: 0,
  25. duration: 0,
  26. startOffset: 0,
  27. options: [],
  28. currentIndex: 0
  29. },
  30. created: function created() {
  31. var _this = this;
  32. var _a = this.data,
  33. defaultIndex = _a.defaultIndex,
  34. initialOptions = _a.initialOptions;
  35. this.set({
  36. currentIndex: defaultIndex,
  37. options: initialOptions
  38. }).then(function () {
  39. _this.setIndex(defaultIndex);
  40. });
  41. },
  42. computed: {
  43. count: function count() {
  44. return this.data.options.length;
  45. },
  46. baseOffset: function baseOffset() {
  47. var data = this.data;
  48. return data.itemHeight * (data.visibleItemCount - 1) / 2;
  49. },
  50. wrapperStyle: function wrapperStyle() {
  51. var data = this.data;
  52. return ["transition: " + data.duration + "ms", "transform: translate3d(0, " + (data.offset + data.baseOffset) + "px, 0)", "line-height: " + data.itemHeight + "px"].join('; ');
  53. }
  54. },
  55. watch: {
  56. defaultIndex: function defaultIndex(value) {
  57. this.setIndex(value);
  58. }
  59. },
  60. methods: {
  61. onTouchStart: function onTouchStart(event) {
  62. this.set({
  63. startY: event.touches[0].clientY,
  64. startOffset: this.data.offset,
  65. duration: 0
  66. });
  67. },
  68. onTouchMove: function onTouchMove(event) {
  69. var data = this.data;
  70. var deltaY = event.touches[0].clientY - data.startY;
  71. this.set({
  72. offset: utils_1.range(data.startOffset + deltaY, -(data.count * data.itemHeight), data.itemHeight)
  73. });
  74. },
  75. onTouchEnd: function onTouchEnd() {
  76. var data = this.data;
  77. if (data.offset !== data.startOffset) {
  78. this.set({
  79. duration: DEFAULT_DURATION
  80. });
  81. var index = utils_1.range(Math.round(-data.offset / data.itemHeight), 0, data.count - 1);
  82. this.setIndex(index, true);
  83. }
  84. },
  85. onClickItem: function onClickItem(event) {
  86. var index = event.currentTarget.dataset.index;
  87. this.setIndex(index, true);
  88. },
  89. adjustIndex: function adjustIndex(index) {
  90. var data = this.data;
  91. index = utils_1.range(index, 0, data.count);
  92. for (var i = index; i < data.count; i++) {
  93. if (!this.isDisabled(data.options[i])) return i;
  94. }
  95. for (var i = index - 1; i >= 0; i--) {
  96. if (!this.isDisabled(data.options[i])) return i;
  97. }
  98. },
  99. isDisabled: function isDisabled(option) {
  100. return utils_1.isObj(option) && option.disabled;
  101. },
  102. getOptionText: function getOptionText(option) {
  103. var data = this.data;
  104. return utils_1.isObj(option) && data.valueKey in option ? option[data.valueKey] : option;
  105. },
  106. setIndex: function setIndex(index, userAction) {
  107. var _this = this;
  108. var data = this.data;
  109. index = this.adjustIndex(index) || 0;
  110. var offset = -index * data.itemHeight;
  111. if (index !== data.currentIndex) {
  112. return this.set({ offset: offset, currentIndex: index }).then(function () {
  113. userAction && _this.$emit('change', index);
  114. });
  115. }
  116. return this.set({ offset: offset });
  117. },
  118. setValue: function setValue(value) {
  119. var options = this.data.options;
  120. for (var i = 0; i < options.length; i++) {
  121. if (this.getOptionText(options[i]) === value) {
  122. return this.setIndex(i);
  123. }
  124. }
  125. return Promise.resolve();
  126. },
  127. getValue: function getValue() {
  128. var data = this.data;
  129. return data.options[data.currentIndex];
  130. }
  131. }
  132. });
  133. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIk9iamVjdCIsInZhbHVlIiwiY29tcG9uZW50XzEiLCJyZXF1aXJlIiwidXRpbHNfMSIsIkRFRkFVTFRfRFVSQVRJT04iLCJjbGFzc2VzIiwicHJvcHMiLCJ2YWx1ZUtleSIsImNsYXNzTmFtZSIsIml0ZW1IZWlnaHQiLCJ2aXNpYmxlSXRlbUNvdW50IiwiaW5pdGlhbE9wdGlvbnMiLCJ0eXBlIiwiZGVmYXVsdEluZGV4IiwiZGF0YSIsInN0YXJ0WSIsIm9mZnNldCIsImR1cmF0aW9uIiwic3RhcnRPZmZzZXQiLCJvcHRpb25zIiwiY3VycmVudEluZGV4IiwiY3JlYXRlZCIsIl90aGlzIiwiX2EiLCJjb21wdXRlZCIsImNvdW50IiwiYmFzZU9mZnNldCIsIndyYXBwZXJTdHlsZSIsIndhdGNoIiwibWV0aG9kcyIsIm9uVG91Y2hTdGFydCIsImV2ZW50Iiwib25Ub3VjaE1vdmUiLCJkZWx0YVkiLCJvblRvdWNoRW5kIiwiaW5kZXgiLCJNYXRoIiwib25DbGlja0l0ZW0iLCJhZGp1c3RJbmRleCIsImkiLCJpc0Rpc2FibGVkIiwib3B0aW9uIiwiZ2V0T3B0aW9uVGV4dCIsInNldEluZGV4IiwidXNlckFjdGlvbiIsInNldFZhbHVlIiwiUHJvbWlzZSIsImdldFZhbHVlIl0sIm1hcHBpbmdzIjoiOztBQUNBQSxPQUFBQSxjQUFBQSxDQUFBQSxPQUFBQSxFQUFBQSxZQUFBQSxFQUE2QyxFQUFFQyxPQUEvQ0QsSUFBNkMsRUFBN0NBO0FBQ0EsSUFBSUUsY0FBY0MsUUFBbEIsMEJBQWtCQSxDQUFsQjtBQUNBLElBQUlDLFVBQVVELFFBQWQsc0JBQWNBLENBQWQ7QUFDQSxJQUFJRSxtQkFBSixHQUFBO0FBQ0FILFlBQUFBLGFBQUFBLENBQTBCO0FBQ3RCSSxhQUFTLENBRGEsY0FDYixDQURhO0FBRXRCQyxXQUFPO0FBQ0hDLGtCQURHLE1BQUE7QUFFSEMsbUJBRkcsTUFBQTtBQUdIQyxvQkFIRyxNQUFBO0FBSUhDLDBCQUpHLE1B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QkFBSWpDLE9BQU8sS0FBWCxJQUFBO0FBQ0EsbUJBQU9BLEtBQUFBLE9BQUFBLENBQWFBLEtBQXBCLFlBQU9BLENBQVA7QUFDSDtBQTFFSTtBQXhEYSxDQUExQmIiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBjb21wb25lbnRfMSA9IHJlcXVpcmUoXCIuLi9jb21tb24vY29tcG9uZW50XCIpO1xudmFyIHV0aWxzXzEgPSByZXF1aXJlKFwiLi4vY29tbW9uL3V0aWxzXCIpO1xudmFyIERFRkFVTFRfRFVSQVRJT04gPSAyMDA7XG5jb21wb25lbnRfMS5WYW50Q29tcG9uZW50KHtcbiAgICBjbGFzc2VzOiBbJ2FjdGl2ZS1jbGFzcyddLFxuICAgIHByb3BzOiB7XG4gICAgICAgIHZhbHVlS2V5OiBTdHJpbmcsXG4gICAgICAgIGNsYXNzTmFtZTogU3RyaW5nLFxuICAgICAgICBpdGVtSGVpZ2h0OiBOdW1iZXIsXG4gICAgICAgIHZpc2libGVJdGVtQ291bnQ6IE51bWJlcixcbiAgICAgICAgaW5pdGlhbE9wdGlvbnM6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgdmFsdWU6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHRJbmRleDoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGF0YToge1xuICAgICAgICBzdGFydFk6IDAsXG4gICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICAgIHN0YXJ0T2Zmc2V0OiAwLFxuICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgY3VycmVudEluZGV4OiAwXG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMuZGF0YSwgZGVmYXVsdEluZGV4ID0gX2EuZGVmYXVsdEluZGV4LCBpbml0aWFsT3B0aW9ucyA9IF9hLmluaXRpYWxPcHRpb25zO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBjdXJyZW50SW5kZXg6IGRlZmF1bHRJbmRleCxcbiAgICAgICAgICAgIG9wdGlvbnM6IGluaXRpYWxPcHRpb25zXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuc2V0SW5kZXgoZGVmYXVsdEluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgICBjb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgYmFzZU9mZnNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICByZXR1cm4gKGRhdGEuaXRlbUhlaWdodCAqIChkYXRhLnZpc2libGVJdGVtQ291bnQgLSAxKSkgLyAyO1xuICAgICAgICB9LFxuICAgICAgICB3cmFwcGVyU3R5bGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBcInRyYW5zaXRpb246IFwiICsgZGF0YS5kdXJhdGlvbiArIFwibXNcIixcbiAgICAgICAgICAgICAgICBcInRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgXCIgKyAoZGF0YS5vZmZzZXQgKyBkYXRhLmJhc2VPZmZzZXQpICsgXCJweCwgMClcIixcbiAgICAgICAgICAgICAgICBcImxpbmUtaGVpZ2h0OiBcIiArIGRhdGEuaXRlbUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgXS5qb2luKCc7ICcpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBkZWZhdWx0SW5kZXg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbmRleCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgb25Ub3VjaFN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgICAgICBzdGFydFk6IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSxcbiAgICAgICAgICAgICAgICBzdGFydE9mZnNldDogdGhpcy5kYXRhLm9mZnNldCxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uVG91Y2hNb3ZlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgdmFyIGRlbHRhWSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSAtIGRhdGEuc3RhcnRZO1xuICAgICAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgICAgIG9mZnNldDogdXRpbHNfMS5yYW5nZShkYXRhLnN0YXJ0T2Zmc2V0ICsgZGVsdGFZLCAtKGRhdGEuY291bnQgKiBkYXRhLml0ZW1IZWlnaHQpLCBkYXRhLml0ZW1IZWlnaHQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Ub3VjaEVuZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICBpZiAoZGF0YS5vZmZzZXQgIT09IGRhdGEuc3RhcnRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBERUZBVUxUX0RVUkFUSU9OXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdXRpbHNfMS5yYW5nZShNYXRoLnJvdW5kKC1kYXRhLm9mZnNldCAvIGRhdGEuaXRlbUhlaWdodCksIDAsIGRhdGEuY291bnQgLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEluZGV4KGluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25DbGlja0l0ZW06IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmluZGV4O1xuICAgICAgICAgICAgdGhpcy5zZXRJbmRleChpbmRleCwgdHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFkanVzdEluZGV4OiBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgaW5kZXggPSB1dGlsc18xLnJhbmdlKGluZGV4LCAwLCBkYXRhLmNvdW50KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IGRhdGEuY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKGRhdGEub3B0aW9uc1tpXSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZChkYXRhLm9wdGlvbnNbaV0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXNhYmxlZDogZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzXzEuaXNPYmoob3B0aW9uKSAmJiBvcHRpb24uZGlzYWJsZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGdldE9wdGlvblRleHQ6IGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxzXzEuaXNPYmoob3B0aW9uKSAmJiBkYXRhLnZhbHVlS2V5IGluIG9wdGlvblxuICAgICAgICAgICAgICAgID8gb3B0aW9uW2RhdGEudmFsdWVLZXldXG4gICAgICAgICAgICAgICAgOiBvcHRpb247XG4gICAgICAgIH0sXG4gICAgICAgIHNldEluZGV4OiBmdW5jdGlvbiAoaW5kZXgsIHVzZXJBY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5hZGp1c3RJbmRleChpbmRleCkgfHwgMDtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSAtaW5kZXggKiBkYXRhLml0ZW1IZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IGRhdGEuY3VycmVudEluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0KHsgb2Zmc2V0OiBvZmZzZXQsIGN1cnJlbnRJbmRleDogaW5kZXggfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJBY3Rpb24gJiYgX3RoaXMuJGVtaXQoJ2NoYW5nZScsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNldCh7IG9mZnNldDogb2Zmc2V0IH0pO1xuICAgICAgICB9LFxuICAgICAgICBzZXRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuZGF0YS5vcHRpb25zO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0T3B0aW9uVGV4dChvcHRpb25zW2ldKSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SW5kZXgoaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5vcHRpb25zW2RhdGEuY3VycmVudEluZGV4XTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIl0sImZpbGUiOiJpbmRleC5qcyJ9