diff --git a/src/sku/Sku.js b/src/sku/Sku.js
index 15e22eea0..a1ec24f5b 100644
--- a/src/sku/Sku.js
+++ b/src/sku/Sku.js
@@ -679,26 +679,16 @@ export default createComponent({
{this.skuTree.map((skuTreeItem) => (
- {skuTreeItem.v.map((skuValue, itemIndex) => (
-
-
-
+ {skuTreeItem.v.map((skuValue) => (
+
))}
))}
diff --git a/src/sku/components/SkuRow.js b/src/sku/components/SkuRow.js
index 960c59c3c..4a800f5bd 100644
--- a/src/sku/components/SkuRow.js
+++ b/src/sku/components/SkuRow.js
@@ -5,11 +5,13 @@ import { BindEventMixin } from '../../mixins/bind-event';
const [createComponent, bem, t] = createNamespace('sku-row');
+export { bem };
+
export default createComponent({
mixins: [
BindEventMixin(function (bind) {
- if (this.scrollable && this.$refs.content) {
- bind(this.$refs.content, 'scroll', this.onScroll);
+ if (this.scrollable && this.$refs.scroller) {
+ bind(this.$refs.scroller, 'scroll', this.onScroll);
}
}),
],
@@ -20,10 +22,7 @@ export default createComponent({
data() {
return {
- present: 0,
- scrollLeft: 0,
- contentWidth: 0,
- contentItemWidth: 0,
+ progress: 0,
};
},
@@ -31,64 +30,67 @@ export default createComponent({
scrollable() {
return this.item.largeImageMode && this.item.v.length > 6;
},
-
- scrollStyle() {
- if (this.scrollable) {
- return {
- transform: `translate3d(${this.present * 20}px, 0, 0)`,
- };
- }
- },
},
methods: {
onScroll() {
- this.$nextTick(() => {
- const { content, contentTop } = this.$refs;
- const distance = contentTop.offsetWidth - content.offsetWidth;
- this.present = content.scrollLeft / distance;
- });
+ const { scroller, row } = this.$refs;
+ const distance = row.offsetWidth - scroller.offsetWidth;
+ this.progress = scroller.scrollLeft / distance;
+ },
+
+ genTitle() {
+ return (
+
+ {this.item.k}
+ {this.item.is_multiple && (
+ ({t('multiple')})
+ )}
+
+ );
},
genIndicator() {
if (this.scrollable) {
+ const style = {
+ transform: `translate3d(${this.progress * 20}px, 0, 0)`,
+ };
+
return (
);
}
},
+
+ genContent() {
+ const nodes = this.slots();
+
+ if (this.item.largeImageMode) {
+ const middle = Math.ceil(nodes.length / 2);
+
+ return (
+
+ );
+ }
+
+ return nodes;
+ },
},
render() {
- const { item } = this;
- const { largeImageMode } = item;
-
- const multipleNode = item.is_multiple && (
-
({t('multiple')})
- );
-
- const SkuContent = (
-
-
- {this.slots('sku-item-group-one')}
-
-
- {this.slots('sku-item-group-two')}
-
-
- );
-
return (
-
-
- {item.k}
- {multipleNode}
-
- {largeImageMode ? SkuContent : this.slots()}
+
+ {this.genTitle()}
+ {this.genContent()}
{this.genIndicator()}
);
diff --git a/src/sku/components/SkuRowItem.js b/src/sku/components/SkuRowItem.js
index b15301127..e2ad21240 100644
--- a/src/sku/components/SkuRowItem.js
+++ b/src/sku/components/SkuRowItem.js
@@ -1,3 +1,4 @@
+import { bem } from './SkuRow';
import { createNamespace } from '../../utils';
import { isSkuChoosable } from '../utils/sku-helper';
@@ -51,23 +52,22 @@ export default createComponent({
genImage(classPrefix) {
const { imgUrl } = this;
- if (imgUrl) {
- if (this.largeImageMode && this.lazyLoad) {
- return (
-

- );
- }
- return

;
+ if (!imgUrl) {
+ return;
}
+
+ if (this.largeImageMode && this.lazyLoad) {
+ return

;
+ }
+
+ return

;
},
},
render() {
const choosed = this.skuValue.id === this.selectedSku[this.skuKeyStr];
- const classPrefix = this.largeImageMode
- ? 'van-sku-row__picture-item'
- : 'van-sku-row__item';
+ const classPrefix = this.largeImageMode ? bem('picture-item') : bem('item');
return (