Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲国产精品综合久久网络 ,三级视频网站在线观看播放,男人夜日日日日日日日日

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          把你的 web 網頁改造為PC App就這么容易

          把你的 web 網頁改造為PC App就這么容易

          你的 web 網頁改造為 Electron App

          基于 Electron, React, React-router, Typescript 一款桌面豆瓣電影應用

          源碼: github.com/Yangfan2016…

          web 項目源碼:github.com/Yangfan2016…

          作者:github.com/Yangfan2016

          前言

          618 在慕課網上淘了一個 1 元的 electron 課程,一個基礎的入門課,還不錯,就想著把前些日子寫的 React+Typescript 實現一個簡單的豆瓣電影應用 改造下,這次也是參(cao)考(xi)騰訊視頻(mac 端 app)的 UI(騰訊視頻請給我打錢,)

          先來看下最終效果

          準備工作

          首先你要有以下的基礎知識

          • web 的基礎知識(html,css,JavaScript)
          • nodejs 的 http 部分的知識(搭建簡單的 web 服務器),
          • electron 的基礎知識(搭建簡單的electron demo、主進程和渲染進程的通信)

          項目目錄

          先來看下最終的目錄結構

          可以使用 treer 來生成目錄結構

          $ npx treer -i "/^(node_modules|dist|build|notes|\.git|\.DS_Store)$/" >tree.txt
          復制代碼
          douban-movie-electron
          ├─.yarnrc # yarn 的配置文件
          ├─app.config.js # app 的全局配置
          ├─main.js # app 的主進程
          ├─package.json
          ├─src # 原有 web 項目的源碼(這里忽略展開)
          | |...... 
          ├─server # api 代理服務器
          | ├─app.js
          | ├─package.json
          | └yarn.lock
          ├─scripts
          | ├─build.js
          | ├─start.js
          | └test.js
          ├─public
          | ├─favicon.ico
          | ├─index.html # 主窗口
          | ├─manifest.json
          | ├─play.html # 播放窗口
          | └renderer.js # 播放窗口的渲染進程
          ├─config
          | ├─env.js
          | ├─paths.js
          | ├─webpack.config.js
          | ├─webpackDevServer.config.js
          | ├─jest
          | | ├─cssTransform.js
          | | └fileTransform.js
          ├─assets # app 的logo
          | ├─icon.png
          | └logo.png
          復制代碼
          

          開發注意

          • 安裝

          需要安裝如下包依賴

          "devDependencies": {
           "electron": "4.1.3", # electron 本體
           "electron-builder": "^20.40.2", # electron 打包工具
           "nodemon": "^1.18.10" # 監聽文件,重啟 node 應用
          }
          

          electron 包下載較慢,我們需要配置下,在項目里新增 .npmrc 或 .yarnrc 文件(如果你的項目沒有使用 sass 的話,不用設置 node-sass 的鏡像地址)

          .npmrc

          registry=https://registry.npm.taobao.org/
          sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
          electron_mirror=https://npm.taobao.org/mirrors/electron/
          

          .yarnrc

          registry "https://registry.npm.taobao.org/"
          sass_binary_site "https://npm.taobao.org/mirrors/node-sass/"
          electron_mirror "https://npm.taobao.org/mirrors/electron/"
          

          項目改造

          • 首先寫一個簡單的 electron-demo
          const { app, BrowserWindow }=require('electron')
          const path=require("path");
          app.on('ready', ()=> {
           // 新建一個窗口
           let mainWindow=new BrowserWindow({
           width: 1160,
           height: 720,
           });
           // 原有的項目開發環境下的 devServer 的端口是 3000 ,我們這里以 url 形式把原有項目加載進來
           mainWindow.loadURL('http://localhost:3000');
          });
          
          • 然后我們配置 package.json 腳本(nodemon 會監聽你的文件變化,重新啟動 electron,不用你每次啟動)
          "scripts": {
           "start": "node scripts/start.js",
           "build": "node scripts/build.js",
           "test": "node scripts/test.js",
           "server": "node server/controllers/index.js",
           "electron-dev": "nodemon --watch ./main.js --exec 'NODE_ENV=development electron .'"
          }
          
          • 執行如下命令
          # 并行執行
          $ yarn start & yarn electron-dev
          
          • 由于是app,和web不同,所以我們要優化下樣式,畫個原型圖先

          推薦這個在線原型圖工具 whimsical.com/

          • 然后我們實現下細節,就可以看到如下效果了

          • 把之前的播放器彈出框改造

          同樣參照騰訊視頻,播放視頻時,會單獨彈出一個新窗口進行播放,在 electorn 里,就是再新建一個窗口

          new BrowserWindow({
           width: 1100,
           height: 500,
           titleBarStyle: "hiddenInset",
          });
          

          現在就有一個問題,就是點擊主窗口的某個電影打開這個播放窗口,那么信息(例如 視頻的 src 地址)該如何傳遞內,我們從 electron 的文檔里可以找到,ipcMain 和 ipcRenderer 這兩個api,用它們進行主進程和渲染進程之間的通信

          項目生產環境配置

          • 生產環境
          • 由于 electron 使用的是 file 協議,所以我們最后運行的就不能以 url 的形式加載了,改造如下
          const { app, BrowserWindow }=require('electron')
          const path=require("path");
          const isProd=process.env.NODE_ENV !=="development";
          app.on('ready', ()=> {
           // 新建一個窗口
           let mainWindow=new BrowserWindow({
           width: 1160,
           height: 720,
           });
           // 生產環境 
           if (isProd) {
           // cra 默認的打包目錄是 build,我們生產環境需要這么引入
           mainWindow.loadFile(path.join(__dirname, "./build/index.html"));
           } else { // 開發環境
           mainWindow.loadURL('http://localhost:3000');
           }
          });
          
          • nodejs api 服務改造 我們需要把 nodejs 的啟動文件引入進來,這樣在生產環境下就不需要單獨啟動了
          1. 首先我們把 nodejs 的啟動 app 暴露出來
          const Koa=require("koa");
          const proxy=require("koa-server-http-proxy");
          const app=new Koa();
          // proxy
          app.use(proxy('/api', {
           target: 'http://api.douban.com/',
           changeOrigin: true,
           pathRewrite: {
           '^/api': '/v2', // 重寫路徑
           },
          }));
          app.use(proxy('/bing', {
           target: 'https://www.bing.com/',
           changeOrigin: true,
           pathRewrite: {
           '^/bing': '/', // 重寫路徑
           },
          }));
          - app.listen(server.port, ()=> {
          - console.log(server.url);
          - });
          + module.exports=app;
          
          1. 然后我們在 main.js 中引入
          const apiServer=require("./server/app");
          // 生產環境我們直接啟動 我們的 nodejs 服務
          if (isProd) {
           // start api server
           apiServer.listen(server.port, ()=> {
           console.log(server.url);
           });
          } else { // 開發環境 我們直接啟動 webpackDevServer
           // start webpack-devserver
           require("./scripts/start");
          }
          

          打包

          使用 electron-builder 打包

          "scripts": {
           "start": "node scripts/start.js",
           "build": "node scripts/build.js",
           "test": "node scripts/test.js",
           "server": "node server/controllers/index.js",
           "electron-dev": "nodemon --watch ./main.js --exec 'NODE_ENV=development electron .'",
           "dist": "rm -rf ./dist && electron-builder"
          },
          // electron-builder 的配置
          "build": {
           "appId": "douban-movie-electron",
           // 打包的文件目錄,這樣可以減少安裝包大小
           "files": [ 
           "package.json",
           "node_modules/**/*",
           "build/**/*",
           "assets",
           "server",
           "main.js",
           "app.config.js"
           ],
           // mac 端的打包配置下,詳細配置 https://www.electron.build/configuration/mac
           "mac": {
           "category": "public.app-category.video", mac 應用程序分類 https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/TP40009250-SW8
           "target": [
           "dmg"
           ],
           "icon": "./assets/icon.png"
           }
          },
          

          執行命令

          $ yarn dist
          

          安裝

          打包的文件會在 dist 文件夾下,我們找到 dmg 文件,進行安裝

          安裝完成,進行預覽,發現 ,哎,首頁的輪播圖加載失敗了 (404),我仔查看路徑,沒有任何問題,但是發現 它們的路徑有一個特點就是都是 file:///static 開頭的(本地圖片以相對路徑引用的,其他 js css 文件也是以相對路徑引入的,只有圖片404,奇怪 )

          幾經周折,終于找到了問題,React-router 我用的是 browserRouter ,就是基于瀏覽器 history api的,改成 hashRouter ,就好了(目前原因未知 ,知道原因的小伙伴請教下)

          時間有限,其他平臺的打包方式及配置,請移步到 electron-builder 官網

          大家推薦一款免費又好用的mac瀏覽器,洋蔥瀏覽器Tor Browser for Mac是一款可以匿名訪問網絡的瀏覽器,同時洋蔥瀏覽器mac版還具備隱藏IP、防監聽等功能,能夠很好的保護用戶網絡上的隱私,這里為大家最新版的tor browser,想要這款瀏覽器的朋友趕緊來看看吧!

          https://www.mac69.com/mac/2231.html

          洋蔥瀏覽器mac版安裝教程

          下載好Tor Browser安裝包后,點擊打開Tor Browser.dmg,將左側【Tor Browser】拖拽至右側應用程序,即可使用。

          tor browser for mac軟件介紹

          在Tor的軟件通過一個由志愿者在世界各地運行中繼的分布式網絡彈跳您的通訊保護你:它可以防止有人看從學習你所訪問的網站您的Internet連接,它可以防止你從你的物理位置訪問的站點,并它允許您訪問被阻止的網站。

          https://www.mac69.com/mac/2231.html

          Tor Browser允許您在Microsoft Windows,Apple MacOS或GNU / Linux上使用Tor,而無需安裝任何軟件。它可以運行USB閃存驅動器,配備預先配置的Web瀏覽器以保護您的匿名性,并且是獨立的(便攜式)。

          https://www.mac69.com/mac/2231.html

          tor browser mac版功能特點

          Tor Browser是個內建「翻墻」功能的網路瀏覽器,藉由「洋蔥路由,洋蔥路由器(Tor)」匿名瀏覽技術,將上網時所傳遞的訊息層層加密保護,讓使用者在瀏覽 網站時不被監控或側錄,也無法查處原本的IP位址或追蹤真實的使用者身份。

          Tor Browser是個相對安全一些但速度沒法太快的匿名上網服務,沒法拿來下載BT或其他P2P,用來看高畫質的線上影片也會吃力些,但相對于其他類似服務來說就是安全許多。

          Tor Browser的本體是個修改,強化過的Mozilla Firefox瀏覽器,除了整合了Tor相關功能之外,還預設啟用了HTTPS Everywhere與NoScript等擴充套件,藉起停用JavaScript,Flash,Silverlight,Java ...與 某些特殊的控制碼來避免某些設計繞過Tor而取得你的真實IP與相關資訊,并以強制HTTPS加密連線的方式大幅提升上網時的安全性。

          畫過渡效果對于程序的重要性是毋容置疑的,過渡動畫的流暢真的能給人一種程序很順暢的感覺。ios系統基本上不管是什么操作都喜歡運用動畫過渡,所以給人一種超流暢的感覺!在項目中我們也會經常被要求在元素切換,界面過渡中添加動畫過渡效果。可是自己寫的話真的超級麻煩,如果有一款強大的動畫庫豈不是很爽。

          什么是animate.css

          animate.css 是一個css3動畫庫,包含76種動畫,并且完全免費開源,可以到github上去下載,使用方法也非常簡單,并且因為是css庫的原因,完全兼容 H5小程序以及uni-app

          官網:https://daneden.github.io/animate.css/

          gitHnb: https://github.com/daneden/animate.css

          安裝方法

          npm安裝:

          npm install animate.css --save
          

          yarn安裝:

          yarn add animate.css
          

          CDN引入

          https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.0/animate.min.css
          

          引入方法

          在各個不同的環境中,引入方法有細微的區別,但是基本上大同小異。

          • 在使用webpackh5中引入上是把它引入到 main.js 中。
          • 微信小程序的開發環境中,將下載好的 animate.css 引入到 app.wxss中即可,引入之前別忘了將后綴改為.wxss eg: @import './animate.wxss';
          • 在uni-app中引入也非常簡單,將下載好的 animate.css 引入到 App.vue中即可。

          使用方法

          animate.css 的使用非常簡單,因為它是把不同的動畫綁定到了不同的類里,所以想要使用哪種動畫,只需要把通用類 animated 和相應的類添加到元素上就行了。

          所以說,我們想切換操作不同的動畫,只需要用 css 來給需要動畫的那個元素來添加,刪除不同的類即可。

          以下是 animate.css 提供的動畫類列表:

          當然,除了動畫之外,我們還可以給動畫元素添加其它的類來控制動畫執行時間,是否無限循環,延遲時間等。

          至于具體的功能,還是推薦大家去看官方文檔,同時它的官網可以預覽到各個動畫類的具體效果;https://daneden.github.io/animate.css/。


          主站蜘蛛池模板: 国产成人精品无码一区二区三区| 日韩国产免费一区二区三区| 日本精品一区二区三区在线观看| 国产免费一区二区三区VR| 国产福利电影一区二区三区,日韩伦理电影在线福 | 无码人妻一区二区三区在线视频| 一区二区三区无码高清视频| 无码人妻精品一区二区三区66 | 日韩精品中文字幕无码一区| 91精品一区二区| 红桃AV一区二区三区在线无码AV | 国产乱码精品一区二区三区四川人| 国语对白一区二区三区| 无码少妇一区二区三区浪潮AV | 国产一区二区精品在线观看| 国产精品视频分类一区| 国产一区二区三区精品视频| 福利一区二区在线| 无码aⅴ精品一区二区三区| 精品国产AV一区二区三区| 亚洲一区影音先锋色资源| 成人免费区一区二区三区| 国产亚洲情侣一区二区无码AV| 日本在线电影一区二区三区 | 国产精品电影一区二区三区 | 国产成人无码精品一区不卡| 无码中文人妻在线一区二区三区| 日韩免费视频一区二区| 中文字幕人妻无码一区二区三区 | 亚洲国产精品一区二区九九 | 少妇无码一区二区三区| 午夜天堂一区人妻| 国产经典一区二区三区蜜芽| 在线日产精品一区| 国产一区二区不卡老阿姨| 国产成人一区二区三区高清| 中文无码AV一区二区三区| 亚洲AV无码一区东京热| 亚洲.国产.欧美一区二区三区| 国产精品熟女视频一区二区| 日韩综合无码一区二区|