1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- <template>
- <view class="tm-swiperListItem fulled overflow absolute"
- :style="{
- height: itemHeight + 'rpx',
- top:scroll_data.scroll.top+(scroll_data.index)*itemHeight+'rpx'
- }">
- <view class="fulled fulled-height"><slot></slot></view>
- </view>
- </template>
- <script>
- export default {
- name: 'tm-swiperListItem',
- props: {
- scroll: {
- type: Object,
- default: () => ({
- scroll: {
- showNum: 1, //当前视图内可容纳的条数
- totalSum: 40, //总条数
- topIndex: 0 //顶部位置条目的索引
- },
- index: 0 //当前索引。
- })
- },
- itemHeight: {
- type: Number,
- default: 100
- }
- },
- data() {
- return {
- show: false //是否渲染本条目。
- };
- },
- watch: {
- scroll: {
- deep: true,
- handler(val) {
- this.setShow();
- }
- }
- },
- computed: {
- scroll_data() {
- return this.scroll
- }
- },
- created() {
- this.setShow();
- },
- methods: {
- setShow() {
- if (this.scroll.index == this.scroll.scroll.topIndex) {
- this.show = true;
- return;
- }
- let shown = 3; //前后三条可以显示+上视图内的。
- let min = this.scroll.scroll.topIndex - shown;
- min = min <= 0 ? 0 : min;
- let max = this.scroll.scroll.topIndex + shown + this.scroll.scroll.showNum;
- if (this.scroll.index >= min && this.scroll.index <= max) {
- this.show = true;
- } else {
- this.show = false;
- }
- }
- }
- };
- </script>
- <style lang="scss"></style>
|