最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Electron+Vue3 MAC 版日历开发记录(8)——专注模式

    正文概述 掘金(叶梅树)   2021-06-08   387

    这是我参与更文挑战的第8天,活动详情查看: 更文挑战

    Electron+Vue3 MAC 版日历开发记录(8)——专注模式

    能坚持到第八天,先给自己点个赞。

    今天在办公室收拾东西时,无意间看到一本书《番茄工作法》,所以萌生出做一个专注---倒计时功能,开启该功能后,让电脑进入全屏倒计时,也让自己进入不操作电脑,把时间用在其他可专注的地方,如:看书。

    Electron+Vue3 MAC 版日历开发记录(8)——专注模式

    先放出效果图来:

    Electron+Vue3 MAC 版日历开发记录(8)——专注模式

    添加控制按钮

    直接在「设置」页面增加「专注模式」按钮:

    Electron+Vue3 MAC 版日历开发记录(8)——专注模式

    // SettingSub.vue
    <Button
        type="button"
        label="打开专注模式"
        icon="pi pi-times"
        class="p-d-block p-mx-auto p-button-success"
        @click="focus"
    />
    
    ...
    
    focus(): void {
      this.$emit('focusClick');
      this.$emit('update:visibleFullSetting', this.sidebarVisible = false);
      window.electron.ipcRenderer.send('show-focus-window');
    },
    

    主要作用:

    1. 向上(FullCalendarMain 组件) emit focusClick 事件,作用是打开「专注倒计时」页面。
    2. 关闭「设置」界面;
    3. 向 Main 进程发送 show-focus-window 事件,作用是提醒界面全屏。

    打开专注界面

    FullCalendarMain 组件只要将 visibleFocusView 设置为 true 即可。

    <focus-view-sub
      v-model:visibleFocusView="visibleFocusView"
    />
    

    具体专注界面如下代码,比较简单。

    <template>
      <Sidebar
        v-model:visible="sidebarVisible"
        class="p-grid nested-grid"
        :base-z-index="1000"
        position="full"
        @click="hideFocus"
      >
        <h1>专注模式</h1>
        <Vue3CountdownClock />
      </Sidebar>
    </template>
    
    <script lang="ts">
    import { defineComponent, ref, provide } from 'vue';
    import Sidebar from 'primevue/sidebar';
    import Vue3CountdownClock from 'vue3-clock-countdown';
    import Moment from 'moment';
    
    export default defineComponent({
      name: 'FocusViewSub',
      components: {
        Sidebar,
        Vue3CountdownClock,
      },
      props: {
        visibleFocusView: Boolean,
      },
      emits: [
        'update:visibleFocusView',
      ],
      setup () {
        const deadLine = ref(Moment().add(40, 'minute').format());
        provide('deadline', deadLine);
    
        const Title = ref('进入倒计时');
        provide('title', Title);
    
        const timerStyle = ref({
          'text-align': 'center',
          'font-family': 'sans-serif',
          'font-weight': 100,
        });
        provide('timerStyle', timerStyle);
    
        const h1Style = ref({
          color: '#396',
          'font-weight': 100,
          'font-size': '40px',
          margin: '40px 0px 20px',
        });
        provide('h1Style', h1Style);
    
        const clockdiv = ref({
          'font-family': 'sans-serif',
          color: '#fff',
          display: 'inline-block',
          'font-weight': 100,
          'text-align': 'center',
          'font-size': '30px',
        });
        provide('clockdiv', clockdiv);
    
        const clockdivDiv = ref({
          padding: '10px',
          'border-radius': '3px',
          background: '#00BF96',
          display: 'inline-block',
          margin: '1px',
        });
        provide('clockdivDiv', clockdivDiv);
    
        const clockdivDivSpan = ref({
          padding: '15px',
          'border-radius': '3px',
          background: '#00816A',
          display: 'inline-block',
        });
        provide('clockdivDivSpan', clockdivDivSpan);
    
        const styleEndTime = ref({
          color: '#fff',
        });
        provide('styleEndTime', styleEndTime);
    
        const smalltext = ref({
          'padding-top': '5px',
          'font-size': '16px',
        });
        provide('smalltext', smalltext);
    
        const titleDays = ref('Days');
        provide('titleDays', titleDays);
    
        const titleHours = ref('Hours');
        provide('titleHours', titleHours);
    
        const titleMinutes = ref('Minutes');
        provide('titleMinutes', titleMinutes);
    
        const titleSeconds = ref('Seconds');
        provide('titleSeconds', titleSeconds);
    
        const titleEndTime = ref('End Time!');
        provide('titleEndTime', titleEndTime);
      },
      data() {
        return {
          sidebarVisible: false,
        };
      },
      watch: {
        visibleFocusView(): void {
          this.sidebarVisible = this.visibleFocusView;
        },
      },
      methods: {
        hideFocus() {
          this.$emit('update:visibleFocusView', this.sidebarVisible);
          window.electron.ipcRenderer.send('hide-focus-window');
        },
      },
    });
    </script>
    

    主要还是利用 PrimeVue 控件中的 Sidebar 组件。

    还有,就是直接使用了一个第三方插件:Vue3-Countdown-Clock,该插件是目前我临时使用的,包括里面的配置我基本使用它提供的,主要看起来和我的主题毫无违和感。

    Electron+Vue3 MAC 版日历开发记录(8)——专注模式

    declare module 'vue3-clock-countdown'
    

    有了界面了,剩下的就是全屏放大了。

    全屏放大

    要达到专注的效果,首先需要让我们的窗口全屏放大,实现我们远离电脑的目标。在 App.ts 类中加入:

    setFullScreen(flag: boolean): this {
        this.window.setFullScreen(flag);
        return this;
    }
    

    这样就可以在 Main 线程加入代码:

    // 打开专注模式界面
    ipcMain.on('show-focus-window', () => {
      if (mainApp == null) {
        mainApp = new App();
      }
      mainApp.setFullScreen(true);
    });
    
    // 关闭专注模式界面
    ipcMain.on('hide-focus-window', () => {
      if (mainApp == null) {
        mainApp = new App();
      }
      mainApp.setFullScreen(false).show();
    });
    

    小结

    这样,基本就实现了我们专注功能的基本逻辑了,对了在页面上如果触发了关闭按钮,则向 Main 线程发送关闭事件:

    hideFocus() {
      this.$emit('update:visibleFocusView', this.sidebarVisible);
      window.electron.ipcRenderer.send('hide-focus-window');
    },
    

    这里,其实两个show-focus-windowhide-focus-window 可以写成一个,后续优化了,未完待续。

    这个项目的所有记录基本放进专栏里了,欢迎查看: Electron+Vue3 MAC 版日历开发记录


    起源地下载网 » Electron+Vue3 MAC 版日历开发记录(8)——专注模式

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元