59 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Vue
		
	
	
| <template>
 | |
| 	<scroll-view :scroll-x="true" :scroll-left="scrollLeft" @scroll="scroll">
 | |
| 		<slot></slot>
 | |
| 	</scroll-view>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| 	export default {
 | |
| 		inject: ['pageId', 'zoneId', 'zoneState'],
 | |
| 		watch: {
 | |
| 
 | |
| 		},
 | |
| 		data() {
 | |
| 			return {
 | |
| 				scrollLeft: 0,
 | |
| 				old: {
 | |
| 					scrollLeft: 0
 | |
| 				},
 | |
| 				windowWidth: null
 | |
| 			};
 | |
| 		},
 | |
| 		created() {
 | |
| 			this.zoneState.curScroll = this;
 | |
| 			uni.getSystemInfo({
 | |
| 				success: (res) => {
 | |
| 					this.windowWidth = res.windowWidth;
 | |
| 				}
 | |
| 			});
 | |
| 		},
 | |
| 		methods: {
 | |
| 			scroll: function(e) {
 | |
| 				this.$emit("scroll", {
 | |
| 					oldLeft: this.old.scrollLeft,
 | |
| 					left: e.detail.scrollLeft,
 | |
| 				})
 | |
| 				this.old.scrollLeft = e.detail.scrollLeft;
 | |
| 
 | |
| 			},
 | |
| 			RefreshScrollLeft(clientRect) {
 | |
| 				var left = clientRect.left;
 | |
| 				if (left > 0) {
 | |
| 					left = clientRect.right;
 | |
| 				}
 | |
| 				if (left > this.windowWidth) {
 | |
| 					var left1 = this.old.scrollLeft + (left - this.windowWidth + 360);
 | |
| 					this.scrollLeft = left1
 | |
| 				} else if (left < 0) {
 | |
| 					this.scrollLeft = this.old.scrollLeft + (left - 380);
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| </script>
 | |
| 
 | |
| <style>
 | |
| 
 | |
| </style>
 |