在Vue中滚动到模式窗口的底部

时间:2018-12-18 13:57:58

标签: javascript node.js vue.js vue-component

我在模态中有一个Vue日历,当日历出现时,我希望窗口滚动到底部,但是我正在努力实现它。 由于模式太大,我无法共享该模式的代码,因此,我仅共享vue组件。 任何帮助将不胜感激,谢谢。

目前我有这个:enter image description here

这就是我希望的样子: enter image description here

这是我的Vue日历组件:

<template class="date-picker-addon">
    <div class="date-picker-box">
        <datepicker :placeholder="today" v-on:selected="startDate"></datepicker>
    </div>
</template>

<script>
import Datepicker from "vuejs-datepicker/dist/vuejs-datepicker.esm.js";
import * as lang from "vuejs-datepicker/src/locale";



    const state = {
        date1: new Date()
    }

  export default {
      components: {
          Datepicker
      },
      data() {
        return {
            today: null,
            format: "d MMMM yyyy",
            disabledDates: {},
            disabledFn: {
                customPredictor(date) {
                    if (date.getDate() % 3 === 0) {
                        return true;
                    }
                }
            },
            highlightedFn: {
                customPredictor(date) {
                    if (date.getDate() % 4 === 0) {
                        return true;
                    }
                }
            },
            highlighted: {},
            eventMsg: null,
            state: state,
            language: "en",
            languages: lang,
            vModelExample: null,
            changedMonthLog: []
        };
    },
    mounted: function(){
        let today = new Date();
        let dd = today.getDate();
        let mm = today.getMonth() + 1; //January is 0!
        let yyyy = today.getFullYear();

        if(dd < 10) {
            dd = `0${dd}`
        };

        if(mm < 10) {
            mm = `0${mm}`
        }; 

        this.today = `${mm}/${dd}/${yyyy}`;
    },
    methods: {
        startDate(value){

            let startDate = new Date(value);
            let dd = startDate.getDate();
            let mm = startDate.getMonth() + 1; //January is 0!
            let yyyy = startDate.getFullYear();

            if(dd < 10) {
                dd = `0${dd}`
            };

            if(mm < 10) {
                mm = `0${mm}`
            }; 

            startDate = `${yyyy}-${mm}-${dd}`;
            this.$emit('update', startDate);

      }

  };
</script>

3 个答案:

答案 0 :(得分:1)

确保您的自定义模式组件发出事件:

this.$emit('open', true)

向模态组件添加引用并观察open事件:

<modal @open="handleOpen" ref="myModal">

打开时,滚动到底部:

handleOpen() {
    this.$refs.myModal.scrollTop = this.$refs.myModal.scrollHeight
}

仅当您的modal组件的顶级元素是具有overflow-y: auto样式的div时,此方法才起作用。

如果不是这种情况,请将逻辑移到模式组件中,并将ref分配给确实具有overflow-y: auto样式的元素。

答案 1 :(得分:0)

尝试纯JS怎么样?

modal.scrollTop = modal.scrollHeight

我不确定这是否是最好的答案,但是由于我来自JQuery,而且在Vue中没有找到通常的“易于使用”功能,因此我通常使用纯JavaScript来实现(通常将其包装在mixin,例如“ domMixins”)。希望对您有所帮助。

答案 2 :(得分:0)

简单方法:

在Modal的可滚动元素上输入id =“ SomeName”(可能为完整内容) 然后添加div class =“ modal ...... @ focus =” handleOpenNews“ 并添加到方法:

handleOpenNews() {
   document.getElementById('SomeName').scrollTo...you needs
 }