最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用electron制作滿屏心特效的示例代碼

 更新時間:2018年11月27日 10:03:58   作者:李昊天  
這篇文章主要介紹了使用electron制作滿屏心特效的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文介紹了使用electron制作滿屏心特效的示例代碼,分享給大家,具體如下:


圖片被壓縮了 看起來很難看

主進程代碼

import {BrowserWindow, app, ipcMain} from 'electron'

createWindow();

ipcMain.on('quitApp', () => {
  app.quit();
});

function createWindow() {

  const loginURL = process.env.NODE_ENV === 'development' ? `http://localhost:9080` : `file://${__dirname}/index.html`;
  const win = new BrowserWindow({

    alwaysOnTop: true,
    modal: true,
    width: 1200,
    height: 6500,
    frame: false,
    show: false,
    darkTheme: true,
    resizable: false,
    minimizable: false,
    maximizable: false,
    transparent: true,
    type: 'toolbar',
    webPreferences: {
      devTools: false,
    }
  });
  win.loadURL(loginURL);
  win.once('ready-to-show', () => {
    win.show();
  });
}

渲染進程代碼

界面代碼

<template>
  <div style="position: absolute;width: 95%;height: 95%;border-radius: 10px;-webkit-app-region: drag">
    <canvas ref="drawHeart" id="drawHeart"></canvas>
  </div>
</template>

js代碼

 mounted() {
      var hearts = [];
      var canvas = this.$refs.drawHeart;
      var wW = 1920;
      var wH = 1040;
      // 創(chuàng)建畫布
      var ctx = canvas.getContext('2d');
      // 創(chuàng)建圖片對象
      var heartImage = new Image();
      heartImage.src = img;
      var num = 100;

      init();

      window.addEventListener('resize', function(){
        wW = window.innerWidth;
        wH = window.innerHeight;
      });
      // 初始化畫布大小
      function init(){
        canvas.width = wW;
        canvas.height = wH;
        for(var i = 0; i < num; i++){
          hearts.push(new Heart(i%5));
        }
        requestAnimationFrame(render);
      }

      function getColor(){
        var val = Math.random() * 10;
        if(val > 0 && val <= 1){
          return '#00f';
        } else if(val > 1 && val <= 2){
          return '#f00';
        } else if(val > 2 && val <= 3){
          return '#0f0';
        } else if(val > 3 && val <= 4){
          return '#368';
        } else if(val > 4 && val <= 5){
          return '#666';
        } else if(val > 5 && val <= 6){
          return '#333';
        } else if(val > 6 && val <= 7){
          return '#f50';
        } else if(val > 7 && val <= 8){
          return '#e96d5b';
        } else if(val > 8 && val <= 9){
          return '#5be9e9';
        } else {
          return '#d41d50';
        }
      }

      function getText(){
        var val = Math.random() * 10;
        if(val > 1 && val <= 3){
          return '愛你一輩子';
        } else if(val > 3 && val <= 5){
          return '感謝你';
        } else if(val > 5 && val <= 8){
          return '喜歡你';
        } else{
          return 'I Love You';
        }
      }

      function Heart(type){
        this.type = type;
        // 初始化生成范圍
        this.x = Math.random() * wW;
        this.y = Math.random() * wH;

        this.opacity = Math.random() * .5 + .5;

        // 偏移量
        this.vel = {
          x: (Math.random() - .5) * 5,
          y: (Math.random() - .5) * 5
        }

        this.initialW = wW * .5;
        this.initialH = wH * .5;
        // 縮放比例
        this.targetScale = Math.random() * .15 + .02; // 最小0.02
        this.scale = Math.random() * this.targetScale;

        // 文字位置
        this.fx = Math.random() * wW;
        this.fy = Math.random() * wH;
        this.fs = Math.random() * 10;
        this.text = getText();

        this.fvel = {
          x: (Math.random() - .5) * 5,
          y: (Math.random() - .5) * 5,
          f: (Math.random() - .5) * 2
        }
      }

      Heart.prototype.draw = function(){
        ctx.save();
        ctx.globalAlpha = this.opacity;
        ctx.drawImage(heartImage, this.x, this.y, this.width, this.height);
        ctx.scale(this.scale + 1, this.scale + 1);
        if(!this.type){
          // 設置文字屬性
          ctx.fillStyle = getColor();
          ctx.font = 'italic ' + this.fs + 'px sans-serif';
          // 填充字符串
          ctx.fillText(this.text, this.fx, this.fy);
        }
        ctx.restore();
      }
      Heart.prototype.update = function(){
        this.x += this.vel.x;
        this.y += this.vel.y;

        if(this.x - this.width > wW || this.x + this.width < 0){
          // 重新初始化位置
          this.scale = 0;
          this.x = Math.random() * wW;
          this.y = Math.random() * wH;
        }
        if(this.y - this.height > wH || this.y + this.height < 0){
          // 重新初始化位置
          this.scale = 0;
          this.x = Math.random() * wW;
          this.y = Math.random() * wH;
        }

        // 放大
        this.scale += (this.targetScale - this.scale) * .1;
        this.height = this.scale * this.initialH;
        this.width = this.height * 1.4;

        // -----文字-----
        this.fx += this.fvel.x;
        this.fy += this.fvel.y;
        this.fs += this.fvel.f;

        if(this.fs > 50){
          this.fs = 2;
        }

        if(this.fx - this.fs > wW || this.fx + this.fs < 0){
          // 重新初始化位置
          this.fx = Math.random() * wW;
          this.fy = Math.random() * wH;
        }
        if(this.fy - this.fs > wH || this.fy + this.fs < 0){
          // 重新初始化位置
          this.fx = Math.random() * wW;
          this.fy = Math.random() * wH;
        }
      }

      function render(){
        ctx.clearRect(0, 0, wW, wH);
        for(var i = 0; i < hearts.length; i++){
          hearts[i].draw();
          hearts[i].update();
        }
        requestAnimationFrame(render);
      }

    }

擴展功能

全屏展示

const size = screen.getPrimaryDisplay().workAreaSize;  //獲取顯示器的寬高
win.setSet(size.width size.height);
win.setPosition(0,0);

這樣就會讓窗口全屏 但是有一個問題 就是這樣做界面不會正確響應 我們可以使用進程通信去解決

win.webContents.sen('windowSize',size);

之后再主進程中監(jiān)聽就行了

窗口點擊穿透

以上代碼會有一個問題 就是一旦運行 就不能關閉了

win.setIgnoreMouseEvents(true) 就可以讓界面只做展示使用 鼠標可以點擊你窗口的任意區(qū)域

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • js實現(xiàn)俄羅斯方塊小游戲分享

    js實現(xiàn)俄羅斯方塊小游戲分享

    這篇文章主要介紹了js實現(xiàn)俄羅斯方塊小游戲分享,,需要的朋友可以參考下
    2014-01-01
  • 移動設備手勢事件庫Touch.js使用詳解

    移動設備手勢事件庫Touch.js使用詳解

    這篇文章主要介紹了移動設備手勢事件庫Touch.js的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 利用hasOwnProperty給數(shù)組去重的面試題分享

    利用hasOwnProperty給數(shù)組去重的面試題分享

    obj.hasOwnProperty(attr) 判斷是否是原型中的屬性,false就是原型中的屬性,下面這篇文章主要給大家介紹了一道利用hasOwnProperty給數(shù)組去重的面試題,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-11-11
  • 理解Javascript_13_執(zhí)行模型詳解

    理解Javascript_13_執(zhí)行模型詳解

    在《理解Javascript_12_執(zhí)行模型淺析》一文中,我們初步的了解了執(zhí)行上下文與作用域的概念,那么這一篇將深入分析執(zhí)行上下文的構建過程,了解執(zhí)行上下文、函數(shù)對象、作用域三者之間的關系。
    2010-10-10
  • 詳解關于html,css,js三者的加載順序問題

    詳解關于html,css,js三者的加載順序問題

    這篇文章主要介紹了關于html,css,js三者的加載順序問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • javascript簡單實現(xiàn)表格行間隔顯示顏色并高亮顯示

    javascript簡單實現(xiàn)表格行間隔顯示顏色并高亮顯示

    表格行間隔顯示顏色并實現(xiàn)高亮顯示,這種效果大家都有見到過吧,下面就為大家詳細介紹下,需要的朋友可不要錯過
    2013-11-11
  • Javascript動畫的實現(xiàn)原理淺析

    Javascript動畫的實現(xiàn)原理淺析

    這篇文章主要介紹了Javascript動畫的實現(xiàn)原理淺析,本文用兩個實例來解釋Javascript動畫的實現(xiàn)原理,需要的朋友可以參考下
    2015-03-03
  • js中的referrer返回上一頁使用介紹

    js中的referrer返回上一頁使用介紹

    js中的referrer想必大家并不陌生吧,在本文將為大家詳細介紹其是如何使用的,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • JavaScript之cookie技術詳解

    JavaScript之cookie技術詳解

    這篇文章主要為大家詳細介紹了JavaScript之cookie技術,運用JS設置cookie、讀取cookie、刪除cookie ,需要的朋友可以參考下
    2016-11-11
  • 8個開發(fā)者必須知道的JavaScript深層概念(推薦)

    8個開發(fā)者必須知道的JavaScript深層概念(推薦)

    JavaScript有一個名為“調用堆?!保–all Stack)的簡單列表,它逐一管理任務(堆棧算法),但是當異步任務被傳遞時,JavaScript會把它彈出到web API,瀏覽器就會處理它,這篇文章主要介紹了8個開發(fā)者必須知道的JavaScript深層概念,需要的朋友可以參考下
    2022-10-10

最新評論

南岸区| 岑溪市| 平遥县| 温州市| 满洲里市| 三穗县| 霍邱县| 台江县| 监利县| 定襄县| 祁门县| 河南省| 瑞金市| 定南县| 婺源县| 铜鼓县| 新余市| 平湖市| 正宁县| 丰镇市| 弥渡县| 孟村| 夏河县| 麟游县| 常宁市| 石家庄市| 墨玉县| 安吉县| 玉树县| 确山县| 禄劝| 巩义市| 温泉县| 枞阳县| 浦北县| 景东| 柘城县| 黔西县| 长治县| 望江县| 神农架林区|