者/sherry
最近在做項目的過程中遇到一個非常奇葩的bug,在h5頁面點擊一個按鈕彈出彈窗,但是這個彈窗剛出現就會自動消失,導致屏幕出現閃動現象,關鍵這個bug還是偶現的。
經過一番研究才發現是vue事件點擊穿透引起的,而且彈窗一定要在300ms內出現才會引發這個bug,接下來分析具體原因:
vue框架內置指令v-on:click有300ms的延遲響應,這是為了判斷區分單擊和雙擊。vue為移動端提供了觸摸方法touchstart、touchmove、touchend,但卻沒有提供tap指令,因此需要自己手動定義v-tap去消除300ms延遲,提升移動端用戶體驗。
自定義v-tap指令:
Vue.directive('tap',{ bind:function(el,binding){ var startTx, startTy,endTx,endTy,longClick,timeOutEvent, longMethod=binding.value.longMethod, method=binding.value.method, params=binding.value.params, propagation=binding.value.propagation; el.addEventListener("touchstart",function(e){ var touch=e.touches[0]; startTx=touch.clientX; startTy=touch.clientY; if(longMethod && typeof longMethod==='function'){ longClick=0; timeOutEvent=setTimeout(function(){ longClick=1; longMethod(e, params) },500) } if(!propagation){ if (e.stopImmediatePropagation) { e.stopImmediatePropagation(); } else { e.propagationStopped=true; } } },false ); el.addEventListener("touchmove",function(e){ if(longMethod && timeOutEvent){ clearTimeout(timeOutEvent); timeOutEvent=0; } },false); el.addEventListener("touchend",function(e){ var touch=e.changedTouches[0]; endTx=touch.clientX; endTy=touch.clientY; if(longMethod && timeOutEvent){ clearTimeout(timeOutEvent); } if((timeOutEvent!=0 && longClick==0)||!longMethod){ if( Math.abs(startTx - endTx) < 6 && Math.abs(startTy - endTy) < 6){ if(params instanceof Array){ method(...params); } else method(params); } var focusInput=document.querySelector('input:focus'); if(focusInput)focusInput.blur(); var tagName=el.tagName.toLowerCase(); if(tagName==='input'||tagName==='textarea')el.focus();//獲取焦點 if(!propagation){ if (e.stopImmediatePropagation) { e.stopImmediatePropagation(); } else { e.propagationStopped=true; } e.stopPropagation(); return false; } } },false); } })
看似tap事件完美解決了移動端延遲響應的問題,但是它卻有個致命的缺點:touch之后300ms會觸發click。
回到我上面提到的那個bug,因為我給按鈕綁定的是tap事件,而彈窗是click。當我點擊按鈕彈出彈窗后,剛好在屏幕相同的位置觸發了彈窗的click事件,因此彈窗消失。而且一定要在300ms內發生,如果彈窗出現時間較長,大于300ms,則不會出現這個問題,這也就是為什么那個bug是偶現的。
bug隱藏得夠深啊,過了好久才想明白。
1,v-on:click和v-tap不要混用
還是拿上面那個例子來說明。如果頁面里面的元素是v-tap,彈窗是v-on:click則可能出現頁面閃動;反之有可能穿透彈窗,引發頁面按鈕的點擊。因為這個時候彈窗消失了,touch300ms后引發的click事件會作用在屏幕相同位置的按鈕上。
2,阻止單擊事件繼續傳播
v-on:click.stop
event.stopPropagation() 。 // 對click和touch都適用,但是防不住touch300ms后引發click
3,css中的pointer-events
這個屬性確切地說不是用來阻止vue事件點擊穿透,而是精確地控制點擊事件的響應元素
pointer-events的值有兩個:auto / none,auto是默認值,none表明該元素不響應點擊事件,該事件繼續往下傳遞
既然本文主要圍繞h5頁面和彈窗的點擊穿透事件講解,那我順便分享個滑動穿透的解決技巧。
當h5頁面內容較多,一屏展示不下時,在y方向是可以滑動的。這時候如果彈出彈窗,彈窗本身是不可滑動的,但是滑動彈窗,會引發彈窗下面H5頁面的滑動。我之前的解決辦法是用watch方法,監視彈窗的彈出狀態動態設置h5頁面的style屬性:overflow-y 為auto或者hidden。
后來發現還有更優雅的解決辦法,只需要防止彈窗的滑動穿透即可:@touchmove.prevent=""
<div class="right-description" v-show="showPop" @click="closeRightPop" @touchmove.prevent=""> <img src="../../assets/coupon/refund_tip_img.png"/> </div>
作為一名開發,寫出來的代碼不僅要滿足產品基本需求,還要更優雅簡單才好。H5進階之路還很漫長,共勉…
家好,我是 Echa。
今天來分享 50 個超實用的 Chrome 瀏覽器擴展!
JSON Viewer Pro 用于可視化JSON文件。其核心功能包括:
輸入界面如下:
格式化之后:
JSONVue 是一個JSON數據查看器,主要用來格式化JSON數據:
Library Sniffer 是一款給開發者使用的工具,能夠探測當前網頁所使用的類庫、框架和服務器環境,為開發者提供了方便。
Wappalyzer 擴展可以用來識別網站背后的底層技術。通過此擴展,可以了解特定應用程序是否是用 React、Vue、Angular、PHP等編寫的。還可以訪問有關 Web 服務器、編程語言、框架、內容管理系統、分析的信息工具、數據庫等。
WhatRuns 擴展程序只需單擊一下即可找到任何網站上使用的技術。
使用PerfectPixel插件可以將設計圖加載至網頁中,與已成型的網頁進行重疊對比,以幫助開發和設計人員規范網頁像素精度。這是一款可以優化前端頁面顯示的Chrome插件。
可以使用此擴展程序快速清除緩存,無需任何確認對話框、彈出窗口等。可以在選項頁面上自定義要清除的數據和數量,包括:應用程序緩存、緩存、Cookie、下載、文件系統、表單數據、歷史記錄、索引數據庫、本地存儲、插件數據、密碼和 WebSQL。
VisBug 是一個使用 JavaScript 構建的開源網頁設計調試工具,它可以讓用戶使用點擊式和拖放式界面來查看網站的元素。
Debug CSS 是一個幫助調試CSS的插件。他可以顯示出頁面元素的輪播,按住Ctrl,并將鼠標懸浮在元素上,即可查看其信息:
CSS Viewer 是一款適用于 Web 開發人員的高效 Chrome 擴展。顧名思義,CSS 查看器可以顯示將鼠標懸停在任何網頁上的元素的 CSS 屬性。
EditThisCookie 是一個 cookie 管理器。可以添加,刪除,編輯,搜索,鎖定和屏蔽cookies。
React Developer Tools 是開源 JavaScript 庫 React 的 Chrome DevTools 擴展。它允許我們在 Chrome 開發者工具中檢查 React 組件層次結構。安裝此插件之后,將在 Chrome DevTools 中獲得兩個新選項卡:"?? Components" 和 "?? Profiler":
Vue.js devtools 是一款基于chrome瀏覽器的用于調試Vue.js應用程序的插件,可以使得開發人員大大提高調試效率。支持用戶對DOM結構數據結構進行解析和調試功能。
Augury 可以幫助開發人員在 Google Chrome 瀏覽器中調試和分析 Angular 應用程序。
Firebug Lite是火狐瀏覽器中著名的開發者工具firebug插件移植到Chrome中的插件,在Chrome中安裝了Firebug Lite插件以后,開發人員可以像在火狐瀏覽器中使用firebug一樣熟悉的方式來調試網頁內容,其包含了基本的HTML、CSS以及Javascript的調試功能,用于幫助網頁前端開發工程師快速地調試網頁,以便及時地找到網頁中的BUG并及時修復。
HTML Validator 在 Chrome 的開發者工具中添加了 HTML Validator。HTML 頁面的錯誤數通過瀏覽器狀態欄中的圖標顯示,詳細信息可以在瀏覽器的開發者工具中查看。
Web Developer 擴展為帶有各種 Web 開發工具的瀏覽器添加了一個工具欄按鈕。該擴展適用于 Chrome 和 Firefox,并且可以在這些瀏覽器支持的任何平臺上運行,包括 Windows、macOS 和 Linux。
Requestly 是一款Chrome和Firefox瀏覽器插件,提供URL轉發、修改HTTP請求和結果、插入腳本等功能。
Window Resizer 主要用來調整瀏覽器窗口的大小以模擬各種屏幕分辨率。
Responsive Viewer 是在一個視圖中顯示多個屏幕的 Chrome 擴展程序。該擴展將幫助前端開發人員在開發響應式網站/應用程序時測試多個屏幕。
此插件允許直接從瀏覽器發送跨域請求,而不會收到跨域錯誤。可以使用此插件覆蓋 Request Origin 標頭,并將 Access-Control-Allow-Origin 設置為 *.
ColorPick Eyedropper 是一個放大的吸管和顏色選擇器工具,可讓從網頁等中選擇顏色值。
CSS Peeper 用于檢查和復制元素樣式的優秀工具,使用 CSSPeeper 可以將鼠標懸停在網頁中的任何元素上,然后單擊鼠標即可復制元素的樣式。
24. Dimensions
Dimensions是一款能幫助使用者對網頁上各種元素屬性之間的距離進行測量的Chrome頁面元素測量插件,該插件在點擊啟動插件圖標后,可以對頁面中圖像、輸入字段、按鈕以及視頻等頁面元素之間上下左右的方位尺寸進行測量,同時還可以通過使用快捷鍵來快速啟用或關閉該插件的功能,簡單實用。
Site Palette 用于生成調色板。設計師和前端開發人員必備的工具。可以通過這款插件輕松獲取網站的配色方案。
ColorZilla 是一款功能強大地提取網頁色彩的工具;也是個快速的對顏色進行調節的Chrome插件,許多的用戶將這款軟件稱呼為顏色吸取插件,它提取的顏色是非常的多樣化,還可生產css顏色的代碼等。
當我們想查看網頁中文字的字體時,最常用的方法就是在控制臺查看文字的字體樣式。那還有沒有更簡單的方法呢?WhatFont 就是一個查看網頁字體的Chrome擴展。只需要的點擊擴展圖標,再點需要查看為文字即可:
Fonts Ninja 可以從任何網站識別字體、添加書簽、試用并購買它們。
使用 BrowserStack 快速啟動擴展在任何瀏覽器中啟動一個新的測試會話。最多可設置 12 個瀏覽器以實現快速訪問并最大限度地減少切換瀏覽器所花費的時間。
Toby 是一款 Chrome 新標簽頁工具,能夠將未讀的標簽頁分組顯示在新標簽頁中,這樣就能把所有未看完的標簽頁都關閉了。分組相當于多個 Chrome 窗口,將你的標簽頁都拖進 Toby 中,就不需要實時開著占地方了。
該擴展提供了每日熱門開發者新聞,不需要再浪費時間搜索高質量的文章了。
Momentum 擁有漂亮的新標簽頁面,每日更新精彩背景壁紙圖片,可設置每日新鮮事焦點以及跟蹤待辦事項,無廣告,無彈窗。
The Great Suspender 是一個輕量級的擴展用來減少 Chrome 的內存占用。如果同時打開許多選項卡,在可配置的時間之后未查看的選項卡將在后臺自動掛起,從而釋放該選項卡消耗的內存和 CPU。
Session Buddy是一個可以幫助用戶查看、新增、編輯當前網站Session狀態的Chrome插件。用戶可以利用該插件保存網站當前的狀態以便在關閉Chrome或關閉計算機后恢復,從而達到節省內存的作用。
Octotree 旨在讓 GitHub 體驗更好。通常,為了檢查 Github 中的子文件夾,需要手動單擊文件夾并導航。Octotree 擴展解決了這個問題。此擴展在項目的左側顯示存儲庫的目錄結構,這有助于更好地理解文件夾結構。
1_EKF88oqIyX6FzgueCKdtXg.gif
File Icons for GitHub and GitLab 可以將 GitHub 和 GitLab 上的原始文件圖標替換為特定文件類型的圖標。
ax DevTools 是一個快速、輕量級但功能強大的測試工具,由 Deque 開發的世界上最值得信賴的可訪問性測試引擎 axe-core 驅動。使用 ax DevTools 在網站開發過程中查找并修復更多可訪問性問題。
OctoLinker 可以將特定語言的語句(如 include、require 或 import)轉換為鏈接。當打開一個包含多個導入語句的文件并且想要快速打開它時,只需將鼠標懸停在鏈接的文件上并單擊即可打開。
此擴展可幫助 Web 開發人員分析網頁是否違反最佳實踐。
Check My Links 是一個鏈接檢查器,它可以抓取網頁并查找損壞的鏈接。
Checkbot 是用于驗證一組HTML頁面上的鏈接的工具。Checkbot可以檢查一個或多個服務器上的單個文檔或一組文檔。它會創建一個報告,該報告匯總了引起某種警告或錯誤的所有鏈接。
Google Page Speed Insighs 是一款旨在優化所有設備上的網頁、提高網頁加載速度的工具。
META SEO inspector是一款可以幫助用戶分析網頁的meta信息并得到SEO評估的谷歌瀏覽器插件。
Ghostery 是強大的隱私保護擴展程序。其主要有以下功能:
AdBlock 用來在YouTube、Facebook、Twitch和其他你喜愛的網站上攔截廣告和彈窗。
番茄工作法(Pomodoro?)時間管理助理。? 長短兩種休息時間 ? 帶有倒計時顯示的工具欄圖標 ? 追蹤Pomodoro歷史和統計訊息 ? 可配置的長休間隔 ? 可配置的定時器時長 ? 桌面與新標簽頁通知 ? 超過20種音效可選的聲音通知 ? 計時器秒針走動音效
Loom 可以用來快速錄制視頻,并且能夠將錄制的視頻上傳到指定的網頁中,Loom還支持在用戶點擊啟動插件時,立即捕捉屏幕圖像,同時開始視頻錄制操作,還可以將錄制好的視頻復制到粘貼板中存儲。
GoFullPage 是一款全屏截圖插件(整個網頁截圖),完整捕獲您當前頁面的屏幕,進行滾動截圖,而無需任何額外的權限。單擊擴展程序圖標,然后將其傳輸到屏幕快照的新標簽頁中,可以在其中將其下載為圖像或PDF,甚至只需拖動即可,保存到桌面。
BetterViewer 可以提供更好的圖像查看體驗,旨在替代基于 Chrome 瀏覽器中內置的圖像查看模式。使用時,只需在頁面右鍵點擊圖片,選擇“在新標簽頁中打開圖片”即可。
svg-grabber 是一個快速預覽并從網站獲取所有 svg 的工具。可以用來預覽、下載和復制網站中所有 SVG 圖標和插圖的代碼。
在HTML中,Id屬性是一個非常重要的元素,它可以為網頁上的每個元素提供一個獨特的標識符。通過Id屬性,您可以精準地定位和操作特定的HTML元素,從而實現更細致的樣式控制和交互功能。本文將為您揭示Id屬性的魔力,教您如何利用它來打造出與眾不同的網頁體驗。
Id屬性的值必須在整個HTML文檔中是唯一的,這使它成為定位和操作特定元素的理想選擇。通常情況下,我們會為頁面中的重要元素如頁頭、導航欄、主內容區域等分別設置Id。
<header id="header">
<nav id="nav">
<ul>
<li><a href="#">首頁</a></li>
<li><a href="#">產品</a></li>
<li><a href="#">關于我們</a></li>
</ul>
</nav>
</header>
<main id="main">
<section id="hero">
<h1>歡迎來到我的網站</h1>
<p>這里是網站的主要內容區域</p>
</section>
</main>
有了Id屬性,您可以在CSS中直接針對特定元素進行樣式定制。這種精準的選擇器使您能夠更好地控制網頁的視覺效果。
#header {
background-color: #333;
color: #fff;
padding: 20px;
}
#nav ul {
list-style-type: none;
display: flex;
}
#nav li a {
color: #fff;
text-decoration: none;
padding: 10px 20px;
}
#hero {
background-color: #f2f2f2;
padding: 50px;
text-align: center;
}
除了CSS,Id屬性在JavaScript中也扮演著重要的角色。通過Id,您可以快速地獲取和操作特定的HTML元素,實現各種交互效果。
<button id="myButton">點擊我</button>
const button=document.getElementById('myButton');
button.addEventListener('click', ()=> {
alert('您點擊了按鈕!');
});
在使用Id屬性時,有幾個需要注意的最佳實踐:
總之,HTML Id屬性是一個非常強大的工具,它可以為網頁元素提供獨特的標識,從而幫助您實現精細化的樣式控制和交互功能。只要掌握好它的用法,相信您一定能打造出令人驚嘆的網頁作品。
生成關于html中OnClick的頭條爆款文章
好的,我為您生成了一篇關于HTML中onClick事件的頭條爆款文章,以下是完整內容:
在HTML中,onClick事件是一種非常強大的交互功能,它可以讓您的網頁元素在用戶點擊時執行各種自定義的操作。無論是彈出提示框、切換樣式還是觸發復雜的交互效果,onClick事件都能輕松搞定。本文將為您揭示onClick事件的魔力,教您如何利用它打造出引人入勝的網頁體驗。
onClick事件最常見的應用就是為按鈕添加點擊響應。當用戶點擊按鈕時,就會觸發預先定義好的JavaScript代碼,從而實現所需的功能。
<button onclick="showMessage()">點擊我</button>
function showMessage() {
alert('您點擊了按鈕!');
}
除了按鈕,您還可以為其他HTML元素如鏈接、圖片等添加onClick事件,讓整個網頁變得生動有趣。
onClick事件的真正威力在于它能與JavaScript無縫結合,實現各種復雜的交互效果。您可以利用JavaScript操作DOM,動態地改變元素的樣式、內容甚至觸發其他事件。
<div id="box" class="box">這是一個盒子</div>
<button onclick="toggleBox()">切換盒子</button>
function toggleBox() {
const box=document.getElementById('box');
box.classList.toggle('active');
}
在這個例子中,當用戶點擊按鈕時,JavaScript會切換盒子元素的樣式類,從而實現顯示/隱藏的交互效果。
除了基本的交互,onClick事件還可以用于觸發更復雜的功能,如表單提交、數據請求、動畫效果等。您可以將onClick事件與其他事件監聽器、API調用等技術相結合,打造出令人驚叩的網頁體驗。
<form onsubmit="submitForm(event)">
<input type="text" id="name" placeholder="請輸入您的名字" />
<button type="submit">提交</button>
</form>
function submitForm(event) {
event.preventDefault(); // 阻止表單默認提交行為
const nameInput=document.getElementById('name');
const name=nameInput.value;
// 執行表單提交的其他邏輯
console.log(`您的名字是: ${name}`);
}
在使用onClick事件時,有幾個需要注意的最佳實踐:
總之,HTML onClick事件是一個非常強大的交互工具,它可以讓您的網頁元素煥發生機,變得更加生動有趣。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。