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