為了前端體驗更加友好,減緩用戶的焦慮情緒,提升項目質量等,我們在項目里面可以使用骨架屏,提前渲染出來一個跟正式頁面相似的頁面出來,減小首屏加載時間。
因為我們的代碼會使用webpack打包,所以在我們的js下載運行之前,用戶是無法在頁面上看到信息,所以,我們要把骨架屏相關的代碼放到HTML里面,當然,可以把代碼直接寫在html文件的<div id=’app‘></div>里面,但是為了維護我們進行開發時的體驗,我們在開發時可以使用一個webpack插件,來像開發組件一樣來開發骨架屏。
1.添加vue-skeleton-webpack-plugin插件
npm install vue-skeleton-webpack-plugin
2.新建我們的骨架組件
首先在我們的項目中新建一個.vue文件,用來寫我們的骨架屏,我這里是在app.vue同級目錄下新建了一個Skeleton.vue,里面可以寫我們的骨架屏代碼;
<template> <div class="skeleton-wrapper"> <section class="skeleton-block"> <!-- eslint-disable vue/max-len --> <img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTA4MCAyNjEiPjxkZWZzPjxwYXRoIGlkPSJiIiBkPSJNMCAwaDEwODB2MjYwSDB6Ii8+PGZpbHRlciBpZD0iYSIgd2lkdGg9IjIwMCUiIGhlaWdodD0iMjAwJSIgeD0iLTUwJSIgeT0iLTUwJSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94Ij48ZmVPZmZzZXQgZHk9Ii0xIiBpbj0iU291cmNlQWxwaGEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIi8+PGZlQ29sb3JNYXRyaXggaW49InNoYWRvd09mZnNldE91dGVyMSIgdmFsdWVzPSIwIDAgMCAwIDAuOTMzMzMzMzMzIDAgMCAwIDAgMC45MzMzMzMzMzMgMCAwIDAgMCAwLjkzMzMzMzMzMyAwIDAgMCAxIDAiLz48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDEpIj48dXNlIGZpbGw9IiMwMDAiIGZpbHRlcj0idXJsKCNhKSIgeGxpbms6aHJlZj0iI2IiLz48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggZmlsbD0iI0Y2RjZGNiIgZD0iTTIzMCA0NGg1MzN2NDZIMjMweiIvPjxyZWN0IHdpZHRoPSIxNzIiIGhlaWdodD0iMTcyIiB4PSIzMCIgeT0iNDQiIGZpbGw9IiNGNkY2RjYiIHJ4PSI0Ii8+PHBhdGggZmlsbD0iI0Y2RjZGNiIgZD0iTTIzMCAxMThoMzY5djMwSDIzMHpNMjMwIDE4MmgzMjN2MzBIMjMwek04MTIgMTE1aDIzOHYzOUg4MTJ6TTgwOCAxODRoMjQydjMwSDgwOHpNOTE3IDQ4aDEzM3YzN0g5MTd6Ii8+PC9nPjwvc3ZnPg=="> <img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTA4MCAyNjEiPjxkZWZzPjxwYXRoIGlkPSJiIiBkPSJNMCAwaDEwODB2MjYwSDB6Ii8+PGZpbHRlciBpZD0iYSIgd2lkdGg9IjIwMCUiIGhlaWdodD0iMjAwJSIgeD0iLTUwJSIgeT0iLTUwJSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94Ij48ZmVPZmZzZXQgZHk9Ii0xIiBpbj0iU291cmNlQWxwaGEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIi8+PGZlQ29sb3JNYXRyaXggaW49InNoYWRvd09mZnNldE91dGVyMSIgdmFsdWVzPSIwIDAgMCAwIDAuOTMzMzMzMzMzIDAgMCAwIDAgMC45MzMzMzMzMzMgMCAwIDAgMCAwLjkzMzMzMzMzMyAwIDAgMCAxIDAiLz48L2ZpbHRlcj48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDEpIj48dXNlIGZpbGw9IiMwMDAiIGZpbHRlcj0idXJsKCNhKSIgeGxpbms6aHJlZj0iI2IiLz48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggZmlsbD0iI0Y2RjZGNiIgZD0iTTIzMCA0NGg1MzN2NDZIMjMweiIvPjxyZWN0IHdpZHRoPSIxNzIiIGhlaWdodD0iMTcyIiB4PSIzMCIgeT0iNDQiIGZpbGw9IiNGNkY2RjYiIHJ4PSI0Ii8+PHBhdGggZmlsbD0iI0Y2RjZGNiIgZD0iTTIzMCAxMThoMzY5djMwSDIzMHpNMjMwIDE4MmgzMjN2MzBIMjMwek04MTIgMTE1aDIzOHYzOUg4MTJ6TTgwOCAxODRoMjQydjMwSDgwOHpNOTE3IDQ4aDEzM3YzN0g5MTd6Ii8+PC9nPjwvc3ZnPg=="> </section> </div> </template> <script> export default { name: 'Skeleton', }; </script> <style scoped> .skeleton-block { display: flex; flex-direction: column; padding: 16px; background:#f7f7f7; } </style>
在這個頁面里面我們可以根據需要來編寫代碼,最好使用樣式或者base64的圖片,以減少初始的請求。
3.把我們的骨架屏文件引入到vue里面
在main.js同級新建一個Skeleton.js文件引入的Skeleton.vue,并把它引入到vue;
// - Skeleton.js import Vue from 'vue'; import Skeleton from './Skeleton.vue'; export default new Vue({ components: { Skeleton, }, render: h=> h(Skeleton), });
4.配置打包方案
在項目根目錄新建vue.config.js,在里面配置vue-skeleton-webpack-plugin插件,并開啟css分離;
const path=require('path'); const SkeletonWebpackPlugin=require('vue-skeleton-webpack-plugin'); module.exports={ configureWebpack: (config)=>{ config.plugins.push(new SkeletonWebpackPlugin({ webpackConfig: { entry: { app: path.join(__dirname, './src/skeleton.js'), }, }, minimize: true, quiet: true, })) }, // css相關配置 css: { // 是否使用css分離插件 ExtractTextPlugin extract: true, // 開啟 CSS source maps? sourceMap: false, // 啟用 CSS modules for all css / pre-processor files. modules: false }, };
5.在瀏覽器中查看效果
因為網絡快的時候,我們是不顯示骨架屏的,所以要把我們的瀏覽器網絡調慢一點(調整為solw 3G),以方便我們開發和調試;
我們會看到骨架屏先被渲染出來,然后才會有我們的頁面渲染出來;
首先感謝各位大牛為社區所做的貢獻,這才使我們在遇到問題時有了更好的解決方案,其次附上我的demo鏈接,方便大家體驗,并且在該demo中還有關于vue-i18n國際化的使用。
demo鏈接:https://gitee.com/webh5/skeletonAndI18n
感謝您的閱讀,歡迎評論和關注哦!
作者:Yinzhishan
鏈接:https://www.jianshu.com/p/cb5717c5948f
ntelliJ IDEA是java編程語言開發的集成環境。IntelliJ在業界被公認為最好的Java開發工具,尤其在智能代碼助手、代碼自動提示、重構、JavaEE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創新的GUI設計等方面的功能是非常強大的。
插件擴展了IntelliJ IDEA的核心功能,例如安裝插件會獲得以下功能:
默認情況下,IntelliJ IDEA包含許多捆綁的插件。您可以禁用捆綁插件,但不能刪除它們,還可以從插件存儲庫或本地存檔文件(ZIP或JAR)安裝其他插件。
IntelliJ IDEA官方最新版免費下載試用,歷史版本下載,在線文檔和幫助文件下載-慧都網
按Ctrl+Alt+S來打開IDE設置,然后選擇Plugins。
使用Marketplace選項卡可以從JetBrains Marketplace或自定義插件庫中瀏覽和安裝插件。
使用Installed選項卡瀏覽捆綁和安裝的插件,啟用、禁用、更新或刪除它們,禁用不必要的插件可以提高性能。
大多數插件可以與任何JetBrains產品一起使用,有些僅限于商業產品,有些則需要單獨的授權許可。
如果一個插件依賴于其他插件,您可以在Additional Info選項卡中找到依賴項列表。如果您的項目依賴于某些插件,請將它們添加到所需插件列表中。
如果現有的插件不提供您需要的一些功能,可以為IntelliJ IDEA創建自己的插件。
默認情況下,IntelliJ IDEA包含許多捆綁的插件。您可以禁用捆綁插件,但不能刪除它們,還可以從插件存儲庫或本地存檔文件(ZIP或JAR)安裝其他插件。
1. 按Ctrl+Alt+S來打開IDE設置,然后選擇Plugins。
2. 點擊Marketplace選項卡然后在搜索字段中輸入插件名稱。
3. 要安裝插件,請單擊Install并重啟IntelliJ IDEA。
要安裝特定版本,請轉到JetBrains Marketplace的插件頁面,按照從磁盤安裝插件中的說明下載并安裝它。例如如果最新版本的插件壞了,您可以這樣做。
1. 下載插件歸檔文件(ZIP或JAR)。
2. 按Ctrl+Alt+S來打開IDE設置,然后選擇Plugins。
3. 在Plugins頁面單擊“設置”按鈕,然后單擊Install Plugin from Disk….
4. 選擇插件歸檔文件并單擊OK。
5. 單擊OK應用更改并在提示時重新啟動IDE。
1. 退出要在其中安裝插件的IDE。
2. 從JetBrains Marketplace頁面,找到所需插件的頁面,選擇Versions選項卡,然后單擊任何版本復制pluginId。
pluginId是您要安裝的插件的簡稱,比如tanv .grazi。
3. 安裝插件:
Windows
進入IntelliJ IDEA安裝目錄下的bin目錄,運行以下命令:
idea64.exe installPlugins <PluginID>
例如:
idea64.exe installPlugins tanvd.grazi
macOS
執行如下命令:
open -na "IntelliJ IDEA.app" --args installPlugins <PluginID>
例如:
open -na "IntelliJ IDEA.app" --args installPlugins tanvd.grazi
Linux
進入IntelliJ IDEA安裝目錄下的bin目錄,運行以下命令:
idea.sh installPlugins <PluginID>
例如:
idea.sh installPlugins tanvd.grazi
如果您正在使用工具箱應用程序,可以使用工具箱應用程序生成的shell腳本運行此命令,可以在工具箱應用程序的IDE設置中找到腳本名稱和位置。
注意:您不能刪除捆綁的插件。
1. 按Ctrl+Alt+S來打開IDE設置,然后選擇Plugins。
2. 打開Installed選項卡,找到要刪除的插件。
3. 暫開Disable列表并選擇Uninstall。
如果您需要在不啟動IntelliJ IDEA的情況下刪除插件,可以手動從插件目錄中刪除它。
如果您不需要相應的功能,可以禁用插件而無需刪除它。
1. 按Ctrl+Alt+S來打開IDE設置,然后選擇Plugins。
2. 打開Installed選項卡,找到并選擇要禁用的插件。
3. 在插件的描述面板中,單擊Disable。
或者您可以使用插件列表中的復選框或插件類別的Disable all 按鈕。
您可以在“設置”按鈕下的菜單中一次禁用或啟用所有手動安裝的插件(非捆綁)。
最近在做中后臺相關頁面中涉及到錄入大量的姓名,手機號碼,身份證號碼來生成訂單,昏天黑地。往往出現bug的頁面都是在錄入一大堆信息之后才顯示。
在開發前期時,對錄入input框的內容不做限制的時候,可以隨便輸入111,222,測試之類的內容,雖然不好看,但是也可以快速錄入,但當開發結束進入聯調和反饋bug的時候,增加了對身份證號碼的正確性校驗,增加了手機號碼的長度和區號校驗,錄入資料的時候還要想想。雖然比較簡單,但是誰讓咱比較懶呢。
其中一種解決方案是在代碼中針對debug情況都自動錄入默認測試數據。 另一種就是今天拍腦門的方案,做個chrome插件,直接在input框上右鍵選擇隨機姓名,隨機手機號,隨機身份證號碼就可以快速錄入合格數據,而且插件也可以分享給測試的小伙伴,也記錄下chrome插件開發的流程,方便未來制作新的小插件。
manifest.json是chrome開發指定的配置文件,指明了很多擴展信息,所以開發插件先上這個文件。
{ "name": "MockInput", //插件名稱 "version": "1.01", //插件版本 "manifest_version": 2, //manifest文件版本號,填2就是了 "description": "右鍵錄入輸入框數據,煩人的手動輸入", //插件描述信息 "icons": { //拓展圖標, "16": "image/icon-16.png", "48": "image/icon-48.png", "128": "image/icon-128.png" }, "browser_action": { //在地址欄右側顯示信息,包含圖標和彈出頁面的設置。 "default_icon": "image/icon-128.png", "default_title": "右鍵輸入mock數據", "default_popup": "html/browser.html" }, "page_action": { //地址欄最后附加圖標。含圖標及行為等 "default_icon": "image/icon-48.png", "default_title": "Test", "default_popup": "html/page.html" }, "background": { //指定擴展進程的background運行環境 "scripts": [ "js/menu.js" ] }, "content_scripts": [ //注入web頁面運行的腳本和樣式。 { "matches": [ "*://*/*" ], "js": [ "js/content.js" ] } ], "homepage_url": "https://notes.tingno.com", //主頁地址 "incognito": "spanning", "offline_enabled": true, "options_page": "html/setting.html", //設置選項頁面 "options_ui":{ "page": "html/setting.html", "chrome_style": true }, "permissions": [ //申請權限 "*://*/*", "contextMenus", "tabs", "activeTab", "storage", "notifications" ] }
我這邊用到的也就上面這些信息,直接帖進去載入chrome有錯誤的話,瀏覽器會進行提示。
這里特別說明content_scripts文件是在指定域名后進行腳本和樣式的注入,大部分插件主要依賴這個部分。可以修改頁面。
首先在配置文件的permissions中申請右鍵權限contextMenus,以及對應的增加擴展環境background的選項,見前面配置文件。 路徑按照相對路徑進行填寫就行。
然后在對應的文件(我這里是js/menu.js)中添加增加菜單內容,需要多增加幾個菜單就多create幾個。
chrome.contextMenus.create({ type: 'normal', title: '模擬數據插入', id: 'menuDemo', contexts: ['editable'] });
create第一個參數是options對象,對應的內容
create還包含一個回調函數,在創建完菜單項后觸發。如果創建過程中有錯誤產生,其詳細信息在Chrome.extension.lastError中。
我的需求里面包含隨機姓名、隨機手機號、隨機身份證、指定姓名、指定手機號、指定身份證。一個總菜單,帶6個子菜單,而且默認我們只是在輸入框右鍵的時候,需要彈出菜單,其他地方沒啥用。
在總菜單之后,加上子菜單。
//子菜單帶上 chrome.contextMenus.create({ type: 'normal', title: '隨機證件號', id: 'randomPerson', parentId: 'menuDemo', contexts: ['editable'], onclick: genericOnClick });
出來效果是什么樣子的呢?
點擊子菜單之后,要將點擊了哪個菜單推送到頁面中去,方便頁面進行操作。
由于右鍵點擊菜單邏輯是在backgroud里面實現,而具體的元素輸入是在具體的tab實現。tab向background發送消息的話,就一個不需要指定。而background發送消息的話,就需要指定具體哪個tab,并且在對應的頁面進行接收。
發送的話,是在右鍵菜單的onclick函數genericOnClick中實現。前面也不知道具體用到啥,全送過去再說。而且onclick的參數句柄上也已經給定了是哪個頁面點擊右鍵,發回去就行了。
function genericOnClick(info, tab) { chrome.tabs.sendMessage(tab.id, {'tab':tab, 'info': info }); }
然后就是在具體的content.js中接收消息,加一個監聽。拿到具體的內容進行打印就行了。
chrome.extension.onMessage.addListener(function(request, _, response) { console.log(request) });
對應的事件傳遞到當前的話,就可以生成對應的隨機值,然后輸入頁面就可以了。不過由于時間短暫,所以沒找到回傳具體右鍵點擊了什么元素,只能在頁面進行注入,右鍵的時候,指定下具體點擊的是哪個元素。目前插件只需要input,所以給所有的頁面的input綁定事件。
var mockContent=null var inputs=document.getElementsByTagName('input') for(var i=0; i< inputs.length; i++){ inputs[i].addEventListener('contextmenu',function(){ mockContent=this }) }
當點擊回調事件回來之后,就知道具體右擊的是什么元素,就可以直接將對應元素還值就是了。
前面元素綁定,加值之后,就是直接mockContent.value=值就是了。但是我們后臺用的是vue寫的,直接操作dom上的value值,不能引起對應的雙向綁定生效,頁面元素校驗審核也不通過。這時候就需要手動觸發下對應的input事件。就變成了下文。隨機生成姓名,手機號,身份證不在本文討論范圍內。自行翻閱之前文章內容。
mockContent.value=value mockContent.dispatchEvent(new Event('input'))
在配置文件里面聲明權限
有時候,其實我們希望錄入的內容是固定的,比如手機號碼。隨機填寫別人的也可以,但是你的系統如果同時還給別人發送驗證碼啊,消息通知之類的就不好了。這時候其實配置一下指定內容既可,這時候就用到的配置頁面,一般配置信息都存儲在storage。最重要的是,放在此處的內容是全局的。
你直接使用chrome.storage進行操作就行了。插件的存儲分為local和sync兩種,sync的配置可以跟著你的谷歌帳號同步的。自己也用不到,就先用本地的好了。內容也很簡單。
//寫入 chrome.storage.local.set({name:'name',age:19},_=>{ }) //讀取,格式一樣,屬性后面的值是默認值。 chrome.storage.local.get({name:'name',age:19},items=>{ console.log(items.name, items.age) })
注意,讀取和寫入都是異步操作。
保存成功要消息提醒一下,在配置文件里面聲明權限,直接用就是了,也很簡單。
chrome.notifications.create(null, { type: 'basic', iconUrl: '../image/icon-48.png', title: '保存成功', message: '配置已經生效,請繼續使用!' });
當然樣式可以很豐富,具體看你自己的需要。
只要用chrome,基本上都會用插件的。開發滿足自己需求的插件,提高效率,堪稱神器。
文中提到的小插件已經放在了github上,大神看看笑話就得了,單純自用。
MockInput: https://github.com/q5276/MockInput
另外,還有批量生成模擬信息的頁面
模擬個人信息測試用:https://notes.tingno.com/demo/mock/person.html
下面是廣告
*請認真填寫需求信息,我們會在24小時內與您取得聯系。