{"ast":null,"code":"import { getEnvSensingList } from '@/api';\nexport default {\n name: 'EnvSensing',\n data() {\n return {\n list: [],\n needScroll: false,\n scrollTimer: null,\n paused: false\n };\n },\n async mounted() {\n const res = await getEnvSensingList();\n this.list = res.data.list;\n this.$nextTick(() => this.checkScroll());\n },\n beforeDestroy() {\n if (this.scrollTimer) cancelAnimationFrame(this.scrollTimer);\n },\n methods: {\n checkScroll() {\n const wrapper = this.$refs.listWrapper;\n const inner = this.$refs.listInner;\n if (!wrapper || !inner) return;\n // 内容高度超过容器时开启无缝滚动\n this.needScroll = inner.offsetHeight > wrapper.offsetHeight;\n if (this.needScroll) {\n this.$nextTick(() => this.startScroll());\n }\n },\n startScroll() {\n const wrapper = this.$refs.listWrapper;\n const inner = this.$refs.listInner;\n if (!wrapper || !inner) return;\n const firstHeight = inner.offsetHeight;\n let lastTime = 0;\n const speed = 0.4; // px per frame (~24px/s at 60fps)\n\n const step = timestamp => {\n if (!this.paused) {\n wrapper.scrollTop += speed;\n // 当滚动到第一份内容末尾时,无缝回到顶部\n if (wrapper.scrollTop >= firstHeight) {\n wrapper.scrollTop -= firstHeight;\n }\n }\n this.scrollTimer = requestAnimationFrame(step);\n };\n this.scrollTimer = requestAnimationFrame(step);\n },\n pauseScroll() {\n this.paused = true;\n },\n resumeScroll() {\n this.paused = false;\n }\n }\n};","map":{"version":3,"names":["getEnvSensingList","name","data","list","needScroll","scrollTimer","paused","mounted","res","$nextTick","checkScroll","beforeDestroy","cancelAnimationFrame","methods","wrapper","$refs","listWrapper","inner","listInner","offsetHeight","startScroll","firstHeight","lastTime","speed","step","timestamp","scrollTop","requestAnimationFrame","pauseScroll","resumeScroll"],"sources":["src/components/LabStats/EnvSensing.vue"],"sourcesContent":["\n\n\n\n\n"],"mappings":"AAkDA,SAAAA,iBAAA;AAEA;EACAC,IAAA;EACAC,KAAA;IACA;MACAC,IAAA;MACAC,UAAA;MACAC,WAAA;MACAC,MAAA;IACA;EACA;EACA,MAAAC,QAAA;IACA,MAAAC,GAAA,SAAAR,iBAAA;IACA,KAAAG,IAAA,GAAAK,GAAA,CAAAN,IAAA,CAAAC,IAAA;IACA,KAAAM,SAAA,YAAAC,WAAA;EACA;EACAC,cAAA;IACA,SAAAN,WAAA,EAAAO,oBAAA,MAAAP,WAAA;EACA;EACAQ,OAAA;IACAH,YAAA;MACA,MAAAI,OAAA,QAAAC,KAAA,CAAAC,WAAA;MACA,MAAAC,KAAA,QAAAF,KAAA,CAAAG,SAAA;MACA,KAAAJ,OAAA,KAAAG,KAAA;MACA;MACA,KAAAb,UAAA,GAAAa,KAAA,CAAAE,YAAA,GAAAL,OAAA,CAAAK,YAAA;MACA,SAAAf,UAAA;QACA,KAAAK,SAAA,YAAAW,WAAA;MACA;IACA;IACAA,YAAA;MACA,MAAAN,OAAA,QAAAC,KAAA,CAAAC,WAAA;MACA,MAAAC,KAAA,QAAAF,KAAA,CAAAG,SAAA;MACA,KAAAJ,OAAA,KAAAG,KAAA;MACA,MAAAI,WAAA,GAAAJ,KAAA,CAAAE,YAAA;MACA,IAAAG,QAAA;MACA,MAAAC,KAAA;;MAEA,MAAAC,IAAA,GAAAC,SAAA;QACA,UAAAnB,MAAA;UACAQ,OAAA,CAAAY,SAAA,IAAAH,KAAA;UACA;UACA,IAAAT,OAAA,CAAAY,SAAA,IAAAL,WAAA;YACAP,OAAA,CAAAY,SAAA,IAAAL,WAAA;UACA;QACA;QACA,KAAAhB,WAAA,GAAAsB,qBAAA,CAAAH,IAAA;MACA;MACA,KAAAnB,WAAA,GAAAsB,qBAAA,CAAAH,IAAA;IACA;IACAI,YAAA;MAAA,KAAAtB,MAAA;IAAA;IACAuB,aAAA;MAAA,KAAAvB,MAAA;IAAA;EACA;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}