| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- <template>
- <scroll-view v-if="visible" scroll-y class="question-wrap" :scroll-into-view="scrollIntoView"
- :scroll-with-animation="true">
- <view class="h-20"></view>
- <question-item :question="question" :readonly="readonly" @update:question="emit('update:question', $event)"
- @scrollTo="handleScrollTo" />
- <view class="h-20"></view>
- </scroll-view>
- </template>
- <script lang="ts" setup>
- import { Study } from '@/types';
- import QuestionItem from './question-item.vue';
- const props = defineProps<{
- question: Study.Question;
- readonly?: boolean;
- currentIndex: number;
- index: number;
- }>();
- const visible = computed(() => {
- return Math.abs(props.currentIndex - props.index) <= 2;
- });
- const emit = defineEmits<{
- (e: 'update:question', question: Study.Question): void;
- }>();
- const scrollIntoView = ref('');
- const handleScrollTo = (selector: string) => {
- console.log('收到子组件滚动请求', selector)
- scrollIntoView.value = '';
- setTimeout(() => {
- if (selector) {
- scrollIntoView.value = selector;
- }
- }, 200);
- }
- </script>
- <style lang="scss" scoped>
- .question-wrap {
- @apply h-full box-border;
- }
- </style>
|