cainiaoblog 23.2.171
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CNAME +1 -0
- package/MP_verify_o6dHCK5mIkxNpzvZ.txt +1 -0
- package/README.md +8 -0
- package/about/index.html +54 -0
- package/ads.txt +1 -0
- package/app/manual.html +104 -0
- package/appConfigs/config +1 -0
- package/archives/2018/index.html +48 -0
- package/archives/2019/index.html +48 -0
- package/archives/2019/page/2/index.html +48 -0
- package/archives/2020/index.html +48 -0
- package/archives/2021/index.html +48 -0
- package/archives/2022/index.html +48 -0
- package/archives/2023/index.html +48 -0
- package/archives/index.html +48 -0
- package/archives/page/2/index.html +48 -0
- package/archives/page/3/index.html +48 -0
- package/article/10047.html +148 -0
- package/article/10164.html +64 -0
- package/article/10624.html +436 -0
- package/article/10745.html +586 -0
- package/article/11674.html +71 -0
- package/article/11939.html +72 -0
- package/article/12238.html +86 -0
- package/article/1230.html +533 -0
- package/article/13265.html +69 -0
- package/article/13823.html +78 -0
- package/article/14125.html +72 -0
- package/article/14192.html +561 -0
- package/article/14375.html +85 -0
- package/article/14744.html +83 -0
- package/article/14936.html +451 -0
- package/article/1518.html +250 -0
- package/article/15428.html +71 -0
- package/article/15518.html +288 -0
- package/article/15569.html +418 -0
- package/article/1566.html +122 -0
- package/article/16017.html +156 -0
- package/article/16947.html +440 -0
- package/article/17096.html +82 -0
- package/article/17246.html +89 -0
- package/article/17575.html +350 -0
- package/article/179.html +757 -0
- package/article/18039.html +233 -0
- package/article/18071.html +375 -0
- package/article/18142.html +71 -0
- package/article/19909.html +160 -0
- package/article/20014.html +89 -0
- package/article/20021.html +389 -0
- package/article/20037.html +280 -0
- package/article/20056.html +95 -0
- package/article/20093.html +404 -0
- package/article/2021.html +607 -0
- package/article/20459.html +115 -0
- package/article/20613.html +263 -0
- package/article/20635.html +71 -0
- package/article/21317.html +71 -0
- package/article/21320.html +90 -0
- package/article/21782.html +548 -0
- package/article/22230.html +435 -0
- package/article/22237.html +347 -0
- package/article/22398.html +109 -0
- package/article/22422.html +270 -0
- package/article/22565.html +300 -0
- package/article/23046.html +250 -0
- package/article/23083.html +215 -0
- package/article/23195.html +297 -0
- package/article/23301.html +835 -0
- package/article/23589.html +285 -0
- package/article/23655.html +338 -0
- package/article/23864.html +76 -0
- package/article/23914.html +96 -0
- package/article/24169.html +135 -0
- package/article/24581.html +349 -0
- package/article/2475.html +500 -0
- package/article/24826.html +77 -0
- package/article/24924.html +247 -0
- package/article/25164.html +1495 -0
- package/article/25318.html +394 -0
- package/article/25710.html +1129 -0
- package/article/25734.html +83 -0
- package/article/26083.html +174 -0
- package/article/26147.html +283 -0
- package/article/26291.html +110 -0
- package/article/26354.html +71 -0
- package/article/26624.html +145 -0
- package/article/26639.html +298 -0
- package/article/26850.html +138 -0
- package/article/26940.html +258 -0
- package/article/27796.html +190 -0
- package/article/27800.html +161 -0
- package/article/28963.html +159 -0
- package/article/28976.html +247 -0
- package/article/29042.html +72 -0
- package/article/29596.html +81 -0
- package/article/29619.html +183 -0
- package/article/29623.html +329 -0
- package/article/29829.html +205 -0
- package/article/29abbd1c.html +112 -0
- package/article/30215.html +178 -0
- package/article/30552.html +78 -0
- package/article/30818.html +201 -0
- package/article/31330.html +364 -0
- package/article/3154.html +577 -0
- package/article/31695.html +348 -0
- package/article/31826.html +71 -0
- package/article/31843.html +132 -0
- package/article/32280.html +212 -0
- package/article/32431.html +74 -0
- package/article/32443.html +72 -0
- package/article/32732.html +122 -0
- package/article/3286.html +251 -0
- package/article/32960.html +198 -0
- package/article/33713.html +72 -0
- package/article/33899.html +615 -0
- package/article/34351.html +74 -0
- package/article/34372.html +89 -0
- package/article/34410.html +74 -0
- package/article/34431.html +118 -0
- package/article/3447.html +75 -0
- package/article/34474.html +142 -0
- package/article/34871.html +147 -0
- package/article/35397.html +175 -0
- package/article/3544.html +199 -0
- package/article/35503.html +115 -0
- package/article/35624.html +84 -0
- package/article/35697.html +384 -0
- package/article/35863.html +73 -0
- package/article/36037.html +253 -0
- package/article/36118.html +71 -0
- package/article/3621.html +119 -0
- package/article/36251.html +296 -0
- package/article/36642.html +352 -0
- package/article/37102.html +763 -0
- package/article/37336.html +351 -0
- package/article/37351.html +89 -0
- package/article/3760.html +294 -0
- package/article/37749.html +75 -0
- package/article/37789.html +83 -0
- package/article/38005.html +765 -0
- package/article/38009.html +284 -0
- package/article/38269.html +194 -0
- package/article/38344.html +88 -0
- package/article/38359.html +334 -0
- package/article/38423.html +379 -0
- package/article/38530.html +213 -0
- package/article/38743.html +268 -0
- package/article/38753.html +204 -0
- package/article/38881.html +71 -0
- package/article/39087.html +414 -0
- package/article/39309.html +84 -0
- package/article/39486.html +74 -0
- package/article/39637.html +306 -0
- package/article/39839.html +72 -0
- package/article/39937.html +152 -0
- package/article/39970.html +71 -0
- package/article/402.html +559 -0
- package/article/40698.html +71 -0
- package/article/40811.html +71 -0
- package/article/40964.html +462 -0
- package/article/41011.html +322 -0
- package/article/41152.html +78 -0
- package/article/41696.html +71 -0
- package/article/41717.html +281 -0
- package/article/41777.html +149 -0
- package/article/419.html +985 -0
- package/article/4233.html +136 -0
- package/article/4292.html +86 -0
- package/article/43302.html +96 -0
- package/article/43397.html +106 -0
- package/article/43724.html +281 -0
- package/article/43999.html +224 -0
- package/article/44426.html +77 -0
- package/article/44964.html +137 -0
- package/article/45004.html +123 -0
- package/article/4510.html +83 -0
- package/article/45156.html +320 -0
- package/article/45157.html +52 -0
- package/article/45267.html +87 -0
- package/article/45641.html +207 -0
- package/article/45960.html +75 -0
- package/article/46100.html +1262 -0
- package/article/46366.html +74 -0
- package/article/46771.html +96 -0
- package/article/46911.html +517 -0
- package/article/46948.html +137 -0
- package/article/46ee4850.html +349 -0
- package/article/47019.html +84 -0
- package/article/47532.html +94 -0
- package/article/4783.html +429 -0
- package/article/47972.html +72 -0
- package/article/48216.html +127 -0
- package/article/48252.html +185 -0
- package/article/48520.html +74 -0
- package/article/48722.html +75 -0
- package/article/48807.html +99 -0
- package/article/49126.html +323 -0
- package/article/50001.html +88 -0
- package/article/50058.html +151 -0
- package/article/50343.html +410 -0
- package/article/50510.html +82 -0
- package/article/51082.html +98 -0
- package/article/51677.html +111 -0
- package/article/5204.html +1085 -0
- package/article/52500.html +538 -0
- package/article/52689.html +259 -0
- package/article/52877.html +569 -0
- package/article/53125.html +191 -0
- package/article/53428.html +251 -0
- package/article/53524.html +74 -0
- package/article/53698.html +322 -0
- package/article/53803e6.html +93 -0
- package/article/53924.html +291 -0
- package/article/53962.html +253 -0
- package/article/54006.html +71 -0
- package/article/54018.html +88 -0
- package/article/54161.html +83 -0
- package/article/54178.html +69 -0
- package/article/54258.html +327 -0
- package/article/54295.html +214 -0
- package/article/54313.html +1976 -0
- package/article/54351.html +90 -0
- package/article/54604.html +80 -0
- package/article/54632.html +71 -0
- package/article/54912.html +756 -0
- package/article/54918.html +129 -0
- package/article/55119.html +136 -0
- package/article/55756.html +118 -0
- package/article/55769.html +136 -0
- package/article/55870.html +161 -0
- package/article/56139.html +92 -0
- package/article/56557.html +69 -0
- package/article/56604.html +69 -0
- package/article/56816.html +266 -0
- package/article/56926.html +153 -0
- package/article/57747.html +409 -0
- package/article/57965.html +475 -0
- package/article/58816.html +78 -0
- package/article/59059.html +435 -0
- package/article/59095.html +350 -0
- package/article/59349.html +244 -0
- package/article/59402.html +216 -0
- package/article/59448.html +55 -0
- package/article/59870.html +94 -0
- package/article/59877.html +208 -0
- package/article/5dbb6f41.html +86 -0
- package/article/6008.html +75 -0
- package/article/60327.html +126 -0
- package/article/6035.html +76 -0
- package/article/60428.html +71 -0
- package/article/60544.html +128 -0
- package/article/61319.html +95 -0
- package/article/61367.html +93 -0
- package/article/624d1918.html +292 -0
- package/article/62543.html +71 -0
- package/article/62887.html +169 -0
- package/article/63074.html +120 -0
- package/article/63266.html +311 -0
- package/article/63351.html +74 -0
- package/article/63542.html +104 -0
- package/article/63824.html +275 -0
- package/article/64051.html +653 -0
- package/article/64189b69.html +72 -0
- package/article/64354.html +75 -0
- package/article/64869.html +79 -0
- package/article/64923.html +596 -0
- package/article/65128.html +95 -0
- package/article/65295.html +79 -0
- package/article/6888.html +75 -0
- package/article/7065.html +84 -0
- package/article/7455.html +85 -0
- package/article/7a3ef8f.html +315 -0
- package/article/8140.html +188 -0
- package/article/8190.html +85 -0
- package/article/8225.html +78 -0
- package/article/84c9ccd6.html +159 -0
- package/article/8f9a9ae3.html +82 -0
- package/article/9174.html +73 -0
- package/article/9738.html +294 -0
- package/article/a4145266.html +71 -0
- package/article/bedea419.html +72 -0
- package/article/bf7e7421.html +78 -0
- package/article/c1867fbf.html +103 -0
- package/article/c5576490.html +70 -0
- package/article/dcb0db28.html +76 -0
- package/article/fc3b727a.html +79 -0
- package/atom.xml +445 -0
- package/baidusitemap.xml +1079 -0
- package/blocks/dns.txt +264 -0
- package/blocks/filter.txt +1070 -0
- package/blocks/script.js +42 -0
- package/categories/CDN/index.html +48 -0
- package/categories/IDE/index.html +48 -0
- package/categories/git/index.html +48 -0
- package/categories/hexo/index.html +48 -0
- package/categories//345/205/254/345/205/261/350/212/202/346/227/245/index.html +48 -0
- package/categories//345/210/206/344/272/253/index.html +48 -0
- package/categories//345/211/215/347/253/257/index.html +48 -0
- package/categories//345/211/215/347/253/257/page/2/index.html +48 -0
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250/index.html +48 -0
- package/categories//345/211/215/347/253/257//346/265/217/350/247/210/345/231/250//347/275/221/347/273/234/345/215/217/350/256/256/index.html +48 -0
- package/categories//345/215/232/345/256/242/index.html +48 -0
- package/categories//345/267/245/345/205/267/index.html +48 -0
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244/index.html +48 -0
- package/categories//345/271/277/345/221/212/350/277/207/346/273/244//350/247/206/351/242/221/347/224/265/350/247/206/345/260/217/350/257/264/346/274/253/347/224/273/350/265/204/350/256/257/351/237/263/344/271/220/index.html +48 -0
- package/categories//346/255/243/345/210/231/index.html +48 -0
- package/categories//346/265/217/350/247/210/345/231/250/index.html +48 -0
- package/categories//347/256/227/346/263/225/index.html +48 -0
- package/categories//350/265/204/350/256/257/index.html +48 -0
- package/categories//350/275/273/346/235/276/344/270/200/345/210/273/index.html +48 -0
- package/cdn/css/font-awesome.min.css +4 -0
- package/cdn/css/grids-responsive-min.css +7 -0
- package/cdn/css/normalize.css +349 -0
- package/cdn/css/pure-min.css +11 -0
- package/cdn/fonts/fontawesome-webfont.eot +0 -0
- package/cdn/fonts/fontawesome-webfont.svg +2671 -0
- package/cdn/fonts/fontawesome-webfont.ttf +0 -0
- package/cdn/fonts/fontawesome-webfont.woff +0 -0
- package/cdn/fonts/fontawesome-webfont.woff2 +0 -0
- package/cdn/js/Valine.min.js +17 -0
- package/cdn/js/canvas-nest.js +1 -0
- package/cdn/js/clipboard.min.js +7 -0
- package/cdn/js/crypto-js.js +25 -0
- package/cdn/js/jquery.min.js +2 -0
- package/css/default.css +1144 -0
- package/css/donate.css +338 -0
- package/css/hbe.style.css +749 -0
- package/css/style.css +2095 -0
- package/donate/index.html +39 -0
- package/google917dcf72f6e5c7f5.html +1 -0
- package/guestbook/index.html +68 -0
- package/hosts/ads.txt +149 -0
- package/hosts/flash.txt +9 -0
- package/hosts/github.txt +6 -0
- package/hosts/google.txt +16936 -0
- package/hosts/winrar.txt +2 -0
- package/img/alipay.svg +46 -0
- package/img/bitcoin.svg +135 -0
- package/img/blog.ico +0 -0
- package/img/blog.png +0 -0
- package/img/gaba.png +0 -0
- package/img/github.svg +1 -0
- package/img/like.svg +1 -0
- package/img/mp-mini.jpg +0 -0
- package/img/mp.png +0 -0
- package/img/paypal.svg +63 -0
- package/img/upy_logo.svg +59 -0
- package/img/wechat.svg +49 -0
- package/index.html +48 -0
- package/jd_root.txt +1 -0
- package/js/codeblock-resizer.js +51 -0
- package/js/dark.js +12 -0
- package/js/donate.js +87 -0
- package/js/fixedPage.js +106 -0
- package/js/gitment.browser.js +3751 -0
- package/js/search.js +86 -0
- package/js/share.js +60 -0
- package/js/smartresize.js +32 -0
- package/js/totop.js +12 -0
- package/kankan/index.html +77 -0
- package/lib/hbe.js +293 -0
- package/package.json +25 -0
- package/page/10/index.html +49 -0
- package/page/11/index.html +59 -0
- package/page/12/index.html +67 -0
- package/page/13/index.html +63 -0
- package/page/14/index.html +66 -0
- package/page/15/index.html +60 -0
- package/page/16/index.html +60 -0
- package/page/17/index.html +62 -0
- package/page/18/index.html +61 -0
- package/page/19/index.html +58 -0
- package/page/2/index.html +48 -0
- package/page/20/index.html +57 -0
- package/page/21/index.html +61 -0
- package/page/22/index.html +55 -0
- package/page/23/index.html +64 -0
- package/page/24/index.html +60 -0
- package/page/25/index.html +58 -0
- package/page/26/index.html +48 -0
- package/page/27/index.html +58 -0
- package/page/3/index.html +48 -0
- package/page/4/index.html +48 -0
- package/page/5/index.html +51 -0
- package/page/6/index.html +51 -0
- package/page/7/index.html +51 -0
- package/page/8/index.html +53 -0
- package/page/9/index.html +48 -0
- package/randomcall/README.html +1 -0
- package/randomcall/lucker.html +290 -0
- package/randomcall/lucky.png +0 -0
- package/robots.txt +22 -0
- package/search.xml +6740 -0
- package/sitemap.xml +2669 -0
- package/tags//345/216/237/345/210/233/index.html +48 -0
- package/tags//345/250/261/344/271/220/index.html +48 -0
- package/tags//346/211/213/345/206/231/index.html +48 -0
- package/tags//347/226/253/346/203/205/index.html +48 -0
- package/tags//350/275/254/350/275/275/index.html +48 -0
- package/tags//350/275/254/350/275/275/page/2/index.html +48 -0
- package/v.html +90 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>css容易使人蒙圈的几个经典问题 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
|
|
2
|
+
var bp = document.createElement('script');
|
|
3
|
+
var curProtocol = window.location.protocol.split(':')[0];
|
|
4
|
+
if (curProtocol === 'https'){
|
|
5
|
+
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
6
|
+
}
|
|
7
|
+
else{
|
|
8
|
+
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
9
|
+
}
|
|
10
|
+
var s = document.getElementsByTagName("script")[0];
|
|
11
|
+
s.parentNode.insertBefore(bp, s);
|
|
12
|
+
})();
|
|
13
|
+
</script><script>(function(){
|
|
14
|
+
var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
|
|
15
|
+
document.write('<script src="' + src + '" id="sozz"><\/script>');
|
|
16
|
+
})();
|
|
17
|
+
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
|
+
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
+
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">css容易使人蒙圈的几个经典问题</h1><div class="post-meta"><span class="date">2020-01-13</span><span> | </span><span class="tag"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 2.5k</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 10</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/60544.html#vcomment"><span class="waline-comment-count" data-path="/article/60544.html"></span><span> 条评论</span></a><div class="post-content"><blockquote>
|
|
20
|
+
<p>作者:_呜啦啦啦火车笛<br><code>原文地址:https://juejin.im/post/5e0abd926fb9a04825712e3f</code></p>
|
|
21
|
+
</blockquote>
|
|
22
|
+
<p>本文摘自这一年来自己在工作中经历的几个比较好的CSS问题(不一定复杂,但个人觉得都挺值得一说),这些CSS问题平时很少遇到,即使遇到后也不一定知道解决方案,即使知道解决方案也不一定知道产生的原理,同时也准备了2个JS问题(之前有整理过一篇较长的JS问题文章,在此不做推新)。本文会更新下去,希望帮到各位朋友。期待您的点赞,谢谢。</p>
|
|
23
|
+
<span id="more"></span>
|
|
24
|
+
|
|
25
|
+
<h3 id="一、CSS篇"><a href="#一、CSS篇" class="headerlink" title="一、CSS篇"></a>一、CSS篇</h3><h4 id="1-1-元素默认蓝色边框"><a href="#1-1-元素默认蓝色边框" class="headerlink" title="1.1 元素默认蓝色边框"></a>1.1 元素默认蓝色边框</h4><p><code>input</code>标签元素(如<code>button</code>、<code>text</code> 、<code>areatext</code>)的一些事件(如<code>click</code>、<code>focus</code>等),在很多浏览器下默认会有蓝色边框出现,如把一个普通<code>button</code>的<code>background</code>和<code>border</code>都设置为<code>none</code>后,触发点击后样式如下:<br><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f59f4ae11d2346?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="rgba"><br>这是由元素默认的轮廓线产生的,这是浏览器的一种防护机制,起到突出元素的作用,把它干掉就行了,方法如下:</p>
|
|
26
|
+
<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">// 方法<span class="number">1</span>:</span><br><span class="line">outline: none / medium;</span><br><span class="line"></span><br><span class="line">// 方法<span class="number">2</span>:</span><br><span class="line"><span class="attribute">outline-width</span>: <span class="number">0</span></span><br></pre></td></tr></table></figure>
|
|
27
|
+
|
|
28
|
+
<h4 id="1-2-背景透明,文字不透明"><a href="#1-2-背景透明,文字不透明" class="headerlink" title="1.2 背景透明,文字不透明"></a>1.2 背景透明,文字不透明</h4><p>我们通常是使用 <code>opacity</code>来做背景的透明化处理,该属性被所有浏览器支持,可以大胆使用,透明度从0.0(完全透明)到1.0(完全不透明),<strong>但该方法会使其所有子元素都透明</strong>,此时若只想让背景透明,其他不透明,则可以使用<code>rgba</code>处理背景:</p>
|
|
29
|
+
<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">background-color</span>: <span class="built_in">rgba</span>( red , green , blue , alpha )</span><br></pre></td></tr></table></figure>
|
|
30
|
+
|
|
31
|
+
<p>其中这个<code>alpha</code> 即设置透明度,取值在0~1之间。<strong>该方法除IE9以下不可用外,其他浏览器均可用</strong>,看一下效果:</p>
|
|
32
|
+
<p><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f59f4ae1e1c8a3?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="rgba"><br>同理,我们也可以用这个方法把整个背景做透明了,即多写一个<code>div</code>作为modal层做透明处理,可以明显看到上面文字并未透明:<br><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f59f4ae68202ed?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="整体背景透明"><br>上述种效果代码如下:</p>
|
|
33
|
+
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">// html</span><br><span class="line"><span class="tag"><<span class="name">section</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"item-pic"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">header</span> <span class="attr">class</span>=<span class="string">"header1"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">h4</span>></span>你会微笑放手,说好不哭让我出新专辑<span class="tag"></<span class="name">h4</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">header</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"item-pic"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">header</span> <span class="attr">class</span>=<span class="string">"header2"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">h4</span>></span>你会微笑放手,说好不哭让我出新专辑<span class="tag"></<span class="name">h4</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">header</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"item-pic"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"handle-opacity"</span>></span> <span class="comment"><!-- 透明罩 --></span></span><br><span class="line"> <span class="tag"><<span class="name">header</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">h4</span>></span>你会微笑放手,说好不哭让我出新专辑<span class="tag"></<span class="name">h4</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">header</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"> <span class="tag"></<span class="name">div</span>></span></span><br><span class="line"><span class="tag"></<span class="name">section</span>></span></span><br><span class="line"><span class="tag"><<span class="name">style</span> <span class="attr">lang</span>=<span class="string">"less"</span>></span><span class="language-css"></span></span><br><span class="line"><span class="language-css"><span class="selector-class">.header1</span> {</span></span><br><span class="line"><span class="language-css"> <span class="attribute">opacity</span>: .<span class="number">6</span>;</span></span><br><span class="line"><span class="language-css">}</span></span><br><span class="line"><span class="language-css"><span class="selector-class">.header2</span> {</span></span><br><span class="line"><span class="language-css"> <span class="attribute">background-color</span>: <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0.45</span>);</span></span><br><span class="line"><span class="language-css">}</span></span><br><span class="line"><span class="language-css"><span class="selector-class">.handle-opacity</span> {</span></span><br><span class="line"><span class="language-css"> <span class="attribute">position</span>: absolute;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">width</span>: <span class="number">100%</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">height</span>: <span class="number">100%</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">background-color</span>: <span class="built_in">rgba</span>(<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>, <span class="number">0.45</span>);</span></span><br><span class="line"><span class="language-css"> <span class="selector-tag">header</span> {</span></span><br><span class="line"><span class="language-css"> <span class="attribute">background-color</span>: <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, <span class="number">0.45</span>);</span></span><br><span class="line"><span class="language-css"> }</span></span><br><span class="line"><span class="language-css">}</span></span><br><span class="line"><span class="language-css"></span><span class="tag"></<span class="name">style</span>></span></span><br></pre></td></tr></table></figure>
|
|
34
|
+
|
|
35
|
+
<h4 id="1-3-div内置img元素,底部总有间距"><a href="#1-3-div内置img元素,底部总有间距" class="headerlink" title="1.3 div内置img元素,底部总有间距"></a>1.3 div内置img元素,底部总有间距</h4><p>用一个<code>div</code>包裹一个<code>img</code>,会出现<code>img</code>不能完全覆盖<code>div</code>空间,总会在底边留下一点空隙。<br><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f5a024389b5f7d?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="div底部间隙"><br>这种现象产生的原因是<code>img</code>是行内元素,浏览器为下行字符(如:g、y、j、p、q)留下的一些空间,这些字符是会比其他字符多占据底部一些空间(具体以当前字体大小有关),这种规则会影响行内元素<code>img</code>标签(其默认垂直对齐方式是依照基线来的,即<code>vertical-align: baseline</code>),同样行内元素都会和外部元素留这么一丢丢安全距离。上图右侧就是加了文字的效果,这样就更说明一切了。</p>
|
|
36
|
+
<p>现在我们知道这种现象主要是由于下行字符串保护机制和<code>img</code>是行内元素这两个因素导致的,那解决方案就从这两处入手,整理如下:</p>
|
|
37
|
+
<ol>
|
|
38
|
+
<li><code>div</code>设置<code>font-size: 0</code>或<code>line-height: 0</code>,进而行高为0;</li>
|
|
39
|
+
<li><code>img</code>设置 <code>vertical-align: top 或者 middle/</code>,使其不再以默认基线为对齐方式;</li>
|
|
40
|
+
<li><code>img</code>设置 <code>display:block</code>,使其变成块级元素。</li>
|
|
41
|
+
</ol>
|
|
42
|
+
<p>综上,个人认为方法3是最好用的,方法1不推荐使用。</p>
|
|
43
|
+
<h4 id="1-4-元素自动填充上背景色"><a href="#1-4-元素自动填充上背景色" class="headerlink" title="1.4 元素自动填充上背景色"></a>1.4 元素自动填充上背景色</h4><p>该现场多在表单输入等场景上会出现,初次看到确实很怪异,效果如图:<br><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f59f4aea3bb583?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="默认颜色"><br>即当浏览器(chrome)给输入框自动填充内容后,也会自动给输入框带上背景(黄或灰蓝),该问题是由于chrome会默认给自动填充的<code>input</code>、<code>select</code>、<code>textarea</code>等加上<code>:-webkit-autofill</code>私有伪属性造成的,比较好的解决方案就是做样式覆盖,代码如下:</p>
|
|
44
|
+
<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">input</span>:-webkit-autofill{</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">0px</span> <span class="number">1000px</span> white inset <span class="meta">!important</span>;</span><br><span class="line">}</span><br><span class="line">select:-webkit-autofill{</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">0px</span> <span class="number">1000px</span> white inset <span class="meta">!important</span>;</span><br><span class="line">}</span><br><span class="line"><span class="selector-tag">textarea</span>:-webkit-autofill{</span><br><span class="line"> <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">0px</span> <span class="number">1000px</span> white inset <span class="meta">!important</span>;</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure>
|
|
45
|
+
|
|
46
|
+
<p>比较渣的办法是设置禁止自动填充,但还是别那样做了…</p>
|
|
47
|
+
<h4 id="1-5-transform-基数值导致字体模糊"><a href="#1-5-transform-基数值导致字体模糊" class="headerlink" title="1.5 transform 基数值导致字体模糊"></a>1.5 transform 基数值导致字体模糊</h4><p>transform作为CSS3最为自豪的属性,已经成为了当前前端开发中不可或缺的方法,但它有个渲染的问题,即当元素设置有transform,且其值为基数或小数,同事其整体高度也有基数时,其内部文字会变模糊,如图:<br><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f59f4b0b9d89ac?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="模糊"><br>上图上模糊状态下的,下图是修正过的,具体原因经查可能是因为<code>transform</code>变换会在浏览器上单独创建一个绘画层并重新进行渲染,在此渲染过程中也处理了周围的文字,如果高度为奇数的文字可能会存在半个像素的计算量,浏览器对这半个像素会进行优化渲染,所以边缘会出现模糊的情况。解决方案即:</p>
|
|
48
|
+
<ol>
|
|
49
|
+
<li>不要给transform属性值设置奇数和小数值;</li>
|
|
50
|
+
<li>调整整体元素高度不要为基数。</li>
|
|
51
|
+
</ol>
|
|
52
|
+
<h4 id="1-6-last-child-和-last-of-type"><a href="#1-6-last-child-和-last-of-type" class="headerlink" title="1.6 :last-child 和 :last-of-type"></a>1.6 :last-child 和 :last-of-type</h4><p>作为CSS常用伪类选择器,<code>:last-child</code>经常会被用到,但有时遇到极端情况,它会意外失效,让人摸不着头脑,例子如下:<br>3个<code>img</code>标签包裹在<code>card</code>中,当前需求是使最后一张图的边框呈粉色,代码如下:</p>
|
|
53
|
+
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">// html</span><br><span class="line"><span class="tag"><<span class="name">div</span> <span class="attr">class</span>=<span class="string">"card"</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">img</span> </span></span><br><span class="line"><span class="tag"> <span class="attr">v-for</span>=<span class="string">"(item,i) in pics"</span></span></span><br><span class="line"><span class="tag"> <span class="attr">:key</span>=<span class="string">"i"</span></span></span><br><span class="line"><span class="tag"> <span class="attr">:src</span>=<span class="string">"item"</span></span></span><br><span class="line"><span class="tag"> /></span></span><br><span class="line"><span class="tag"></<span class="name">div</span>></span></span><br><span class="line">// css</span><br><span class="line"><span class="tag"><<span class="name">style</span> <span class="attr">lang</span>=<span class="string">"less"</span>></span><span class="language-css"></span></span><br><span class="line"><span class="language-css"><span class="selector-class">.card</span> {</span></span><br><span class="line"><span class="language-css"> > <span class="selector-tag">img</span> {</span></span><br><span class="line"><span class="language-css"> <span class="attribute">width</span>: <span class="number">150px</span>;</span></span><br><span class="line"><span class="language-css"> <span class="attribute">margin-right</span>: <span class="number">10px</span>;</span></span><br><span class="line"><span class="language-css"> &<span class="selector-pseudo">:last-child</span> {</span></span><br><span class="line"><span class="language-css"> <span class="attribute">border</span>: <span class="number">5px</span> solid pink;</span></span><br><span class="line"><span class="language-css"> }</span></span><br><span class="line"><span class="language-css"> }</span></span><br><span class="line"><span class="language-css">}</span></span><br><span class="line"><span class="language-css"></span><span class="tag"></<span class="name">style</span>></span></span><br></pre></td></tr></table></figure>
|
|
54
|
+
|
|
55
|
+
<p>同理用<code>:last-of-type</code>也能实现:</p>
|
|
56
|
+
<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-class">.card</span> {</span><br><span class="line"> > <span class="selector-tag">img</span> {</span><br><span class="line"> <span class="attribute">width</span>: <span class="number">150px</span>;</span><br><span class="line"> <span class="attribute">margin-right</span>: <span class="number">10px</span>;</span><br><span class="line"> &<span class="selector-pseudo">:last-of-type</span> {</span><br><span class="line"> <span class="attribute">border</span>: <span class="number">5px</span> solid pink;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
|
57
|
+
|
|
58
|
+
<p>效果如下:<br><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f59f4b20ceed2a?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="有效"><br>现在要往<code>img</code>后加一个<code>span</code>,发现<code>:last-child</code>已失效:</p>
|
|
59
|
+
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">// html</span><br><span class="line"><div class="card"></span><br><span class="line"> <img </span><br><span class="line"> v-for="(item,i) in pics"</span><br><span class="line"> :key="i"</span><br><span class="line"> :src="item"</span><br><span class="line"> /></span><br><span class="line"> <span>next is ...</span></span><br><span class="line"></div></span><br><span class="line">// css</span><br><span class="line"><style lang="less"></span><br><span class="line">.card {</span><br><span class="line"> > img {</span><br><span class="line"> width: 150px;</span><br><span class="line"> margin-right: 10px;</span><br><span class="line"> &:last-child {</span><br><span class="line"> border: 5px solid pink;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></style></span><br></pre></td></tr></table></figure>
|
|
60
|
+
|
|
61
|
+
<p><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f59f4b17bdba75?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="失效"><br>而此时<code>:last-of-type</code>依然没问题:<br><img src="https://user-gold-cdn.xitu.io/2019/12/31/16f59f4b22643b37?imageView2/0/w/1280/h/960/format/webp/ignore-error/1" alt="有效2"><br>现在得出结论:</p>
|
|
62
|
+
<ol>
|
|
63
|
+
<li><code>:last-child</code>选取一群兄弟元素中的最后一个元素,且最后的这个元素必须是所声明的指定元素(注意2个条件);</li>
|
|
64
|
+
<li><code>:last-of-type</code>选取一群兄弟元素中的最后一个指定类型的元素。</li>
|
|
65
|
+
</ol>
|
|
66
|
+
<p>可知,<code>:last-of-type</code>更严谨一些,不容易产生意外bug,我更推荐使用它。同理适用于<code>:nth-last-child(n)</code>和<code>:nth-last-of-type(n)</code></p>
|
|
67
|
+
<h3 id="二、DOM篇"><a href="#二、DOM篇" class="headerlink" title="二、DOM篇"></a>二、DOM篇</h3><p>这部分我会叙述一些DOM操作遇到的一些容易被忽视的问题。</p>
|
|
68
|
+
<h4 id="2-1-IOS日期显示问题"><a href="#2-1-IOS日期显示问题" class="headerlink" title="2.1 IOS日期显示问题"></a>2.1 IOS日期显示问题</h4><p>经常做H5移动端开发的朋友我想对这个问题肯定不陌生,那就是在部门IOS版本(IOS5及以下)中,对以“-”间隔的字符串时间格式的解析是不成功的,比如我们写了这么一个鸡肋时间格式适配器:</p>
|
|
69
|
+
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">DateFormat</span>(<span class="params">date</span>) {</span><br><span class="line"> <span class="keyword">if</span>(!date) <span class="keyword">return</span> <span class="literal">null</span>;</span><br><span class="line"> date = <span class="keyword">new</span> <span class="title class_">Date</span>(date);</span><br><span class="line"> <span class="keyword">let</span> Y = date.<span class="title function_">getFullYear</span>();</span><br><span class="line"> <span class="keyword">let</span> M = (date.<span class="title function_">getMonth</span>() >= <span class="number">0</span> && date.<span class="title function_">getMonth</span>() <= <span class="number">8</span>) ? <span class="string">`0<span class="subst">${date.getMonth() + <span class="number">1</span>}</span>`</span> : <span class="string">`<span class="subst">${date.getMonth() + <span class="number">1</span>}</span>`</span>;</span><br><span class="line"> <span class="keyword">let</span> D = (date.<span class="title function_">getDate</span>() >= <span class="number">0</span> && date.<span class="title function_">getDate</span>() <= <span class="number">9</span>) ? <span class="string">`0<span class="subst">${date.getDate()}</span>`</span>: <span class="string">`<span class="subst">${date.getDate()}</span>`</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="string">`Y-M-D`</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
|
70
|
+
|
|
71
|
+
<p>此时如果在IOS5及以下版本的iphone下,传入 “2019-12-31”就会呈现出 <code>NaN-NaN-NaN</code>,而其他IOS版本及安卓系统都是没问题的。</p>
|
|
72
|
+
<p>针对上述问题,要做兼容适配,即把以”-“间隔的事件字符串替换成以”/“即可,同样是这个适配器,添加一段代码:</p>
|
|
73
|
+
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">DateFormat</span>(<span class="params">date</span>) {</span><br><span class="line"> <span class="keyword">if</span>(!date) <span class="keyword">return</span> <span class="literal">null</span>;</span><br><span class="line"> <span class="keyword">if</span>(<span class="keyword">typeof</span> date === <span class="string">'string'</span> && date.<span class="title function_">indexOf</span>(<span class="string">'T'</span>)!=-<span class="number">1</span> && date.<span class="title function_">indexOf</span>(<span class="string">'+'</span>)!=-<span class="number">1</span>) {</span><br><span class="line"> date = date.<span class="title function_">replace</span>(<span class="regexp">/-/g</span>, <span class="string">'/'</span>).<span class="title function_">replace</span>(<span class="string">'T'</span>,<span class="string">' '</span>).<span class="title function_">substring</span>(<span class="number">0</span>,date.<span class="title function_">indexOf</span>(<span class="string">'.'</span>))</span><br><span class="line"> }</span><br><span class="line"> date = <span class="keyword">new</span> <span class="title class_">Date</span>(date);</span><br><span class="line"> <span class="keyword">let</span> Y = date.<span class="title function_">getFullYear</span>();</span><br><span class="line"> <span class="keyword">let</span> M = (date.<span class="title function_">getMonth</span>() >= <span class="number">0</span> && date.<span class="title function_">getMonth</span>() <= <span class="number">8</span>) ? <span class="string">`0<span class="subst">${date.getMonth() + <span class="number">1</span>}</span>`</span> : <span class="string">`<span class="subst">${date.getMonth() + <span class="number">1</span>}</span>`</span>;</span><br><span class="line"> <span class="keyword">let</span> D = (date.<span class="title function_">getDate</span>() >= <span class="number">0</span> && date.<span class="title function_">getDate</span>() <= <span class="number">9</span>) ? <span class="string">`0<span class="subst">${date.getDate()}</span>`</span>: <span class="string">`<span class="subst">${date.getDate()}</span>`</span>;</span><br><span class="line"> <span class="keyword">return</span> <span class="string">`Y-M-D`</span></span><br><span class="line">}</span><br></pre></td></tr></table></figure>
|
|
74
|
+
|
|
75
|
+
<h4 id="2-2-ENTER键使当前页刷新"><a href="#2-2-ENTER键使当前页刷新" class="headerlink" title="2.2 ENTER键使当前页刷新"></a>2.2 ENTER键使当前页刷新</h4><p>这个真的很诡异的问题,当在一个表单中执行了ENTER键提交后,如果是打开新页面显示提交结果,则会发现当前表单页面也跟着刷新了,这种体验当然是很糟糕的。经查证,该问题的产生条件为:<code>Form</code>中只有一个<code>input</code>时,此时执行ENTER键会自动提交表单并刷新页面。解决方案也很粗暴,直接在input输入框附近写一个隐藏标签,这样就有2个input了,即避免了产生默认刷新的bug,实例如下:</p>
|
|
76
|
+
<figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag"><<span class="name">form</span>></span></span><br><span class="line"> <span class="tag"><<span class="name">input</span> </span></span><br><span class="line"><span class="tag"> <span class="attr">type</span>=<span class="string">"text"</span> </span></span><br><span class="line"><span class="tag"> <span class="attr">v-model.trim</span>=<span class="string">"searchText"</span> </span></span><br><span class="line"><span class="tag"> <span class="attr">placeholder</span>=<span class="string">"搜索您感兴趣的内容"</span></span></span><br><span class="line"><span class="tag"> @<span class="attr">keyup.enter</span>=<span class="string">"goSearch"</span> </span></span><br><span class="line"><span class="tag"> /></span></span><br><span class="line"> <span class="tag"><<span class="name">input</span> </span></span><br><span class="line"><span class="tag"> <span class="attr">id</span>=<span class="string">"hidden"</span><span class="attr">type</span>=<span class="string">"text"</span> </span></span><br><span class="line"><span class="tag"> <span class="attr">style</span>=<span class="string">"display:none"</span> </span></span><br><span class="line"><span class="tag"> @<span class="attr">keyup.enter</span>=<span class="string">"goSearch"</span></span></span><br><span class="line"><span class="tag"> /></span></span><br><span class="line"><span class="tag"></<span class="name">form</span>></span></span><br></pre></td></tr></table></figure>
|
|
77
|
+
|
|
78
|
+
<p>终于在2020年到来前夕发了一篇比较赶的文章,结束我的2019之旅。本文会一直更新下去,如有不同见解和问题,请留言指出,期待您的点赞。最后祝您2020好运连连。</p>
|
|
79
|
+
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/60544.html">https://xuehuayu.cn/article/60544.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E8%BD%AC%E8%BD%BD/">转载</a></div><div class="post-nav"><a class="pre" href="/article/41777.html">HTTPS 原理分析带着疑问层层深入</a><a class="next" href="/article/23083.html">“云”端的语雀:用 JavaScript 全栈打造商业级应用</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
80
|
+
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
81
|
+
const locale = {
|
|
82
|
+
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
83
|
+
sofa: '沙发空缺中,还不快抢~',
|
|
84
|
+
};
|
|
85
|
+
Waline.init({
|
|
86
|
+
el: '#vcomment',
|
|
87
|
+
serverURL: serverURL,
|
|
88
|
+
pageSize: '20',
|
|
89
|
+
visitor: true, // 阅读量统计
|
|
90
|
+
requiredMeta: ['nick', 'mail'],
|
|
91
|
+
emoji: [
|
|
92
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
93
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
94
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
95
|
+
],
|
|
96
|
+
locale,
|
|
97
|
+
pageview: true
|
|
98
|
+
})
|
|
99
|
+
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
|
|
100
|
+
var val = $(this).val()
|
|
101
|
+
var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
|
|
102
|
+
var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
|
|
103
|
+
var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
|
|
104
|
+
|
|
105
|
+
if (val === 'self') {
|
|
106
|
+
$('#search').html(self)
|
|
107
|
+
var search_path = 'search.xml';
|
|
108
|
+
if (search_path.length == 0) {
|
|
109
|
+
search_path = 'search.xml';
|
|
110
|
+
}
|
|
111
|
+
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
112
|
+
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
113
|
+
} else if (val === 'baidu') {
|
|
114
|
+
$('#search').html(baidu)
|
|
115
|
+
} else if (val === 'google') {
|
|
116
|
+
$('#search').html(google)
|
|
117
|
+
}
|
|
118
|
+
})</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
|
|
119
|
+
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
120
|
+
if (cnb) {
|
|
121
|
+
var gxba =document.getElementById('gxba')
|
|
122
|
+
var gaba =document.getElementById('gaba')
|
|
123
|
+
var gabaLink =document.getElementById('gaba-link')
|
|
124
|
+
gxba.innerText ='京ICP备20007647号-1'
|
|
125
|
+
gaba.innerText ='京公网安备 11010802031254号'
|
|
126
|
+
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
127
|
+
}
|
|
128
|
+
})()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="zh-CN" data-dark><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta name="description" content="前端壹菜鸟,记录工作难题,关注前端知识,收集精彩博文,做技术的搬运工"><meta name="msvalidate.01" content="0FE4D8B3381D3D87088996B886E1E2BD"><title>react+electron受控组件自定义右键菜单复制粘贴 | 前端壹菜鸟</title><link rel="stylesheet" type="text/css" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/css/style.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/normalize.css@latest/normalize.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/pure-min.min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/purecss@latest/build/grids-responsive-min.css"><link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css"><link rel="icon" mask="" sizes="any" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="Shortcut Icon" type="image/x-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.ico"><link rel="apple-touch-icon" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="apple-touch-icon-precomposed" href="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/blog.png"><link rel="alternate" type="application/atom+xml" href="/atom.xml"><script type="text/javascript" src="//cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8385136408348258"></script><script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" async></script><script>(function(){
|
|
2
|
+
var bp = document.createElement('script');
|
|
3
|
+
var curProtocol = window.location.protocol.split(':')[0];
|
|
4
|
+
if (curProtocol === 'https'){
|
|
5
|
+
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
|
|
6
|
+
}
|
|
7
|
+
else{
|
|
8
|
+
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
|
|
9
|
+
}
|
|
10
|
+
var s = document.getElementsByTagName("script")[0];
|
|
11
|
+
s.parentNode.insertBefore(bp, s);
|
|
12
|
+
})();
|
|
13
|
+
</script><script>(function(){
|
|
14
|
+
var src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d182b3f28525f2db83acfaaf6e696dba';
|
|
15
|
+
document.write('<script src="' + src + '" id="sozz"><\/script>');
|
|
16
|
+
})();
|
|
17
|
+
</script><script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src='https://hm.baidu.com/hm.js?011f0b44e8452bfa57fbfa23c5fe7683';var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm, s);})();
|
|
18
|
+
</script><script async src="https://www.googletagmanager.com/gtag/js?id=UA-150860401-1"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);};gtag('js',new Date());gtag('config','UA-150860401-1');
|
|
19
|
+
</script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/fixedPage.min.js"></script><meta name="generator" content="Hexo 6.3.0"></head><body><div class="body_container"><div id="header"><div class="site-name"><a id="logo" href="/.">前端壹菜鸟</a><p class="description">关注前端知识,收集精彩博文,做技术的搬运工</p></div><div id="nav-menu"><a class="current" href="/." target="_self"><i class="fa fa-home"> 首页</i></a><a href="/archives/" target="_self"><i class="fa fa-archive"> 归档</i></a><a href="/guestbook/" target="_self"><i class="fa fa-comments"> 留言</i></a><a href="/about/" target="_self"><i class="fa fa-user"> 关于</i></a><a href="https://laonongmin.online/" target="_target"><i class="fa fa-group"> 看看</i></a><a href="https://love.xuehuayu.cn/" target="_target"><i class="fa fa-heart"> LOVE</i></a></div></div><div class="pure-g" id="layout"><div class="pure-u-1 pure-u-md-3-4"><div class="content_container"><div class="post"><h1 class="post-title c-post">react+electron受控组件自定义右键菜单复制粘贴</h1><div class="post-meta"><span class="date">2020-04-29</span><span> | </span><span class="tag original"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创 </a></span><span> | </span><span class="category"><a href="/categories/%E5%89%8D%E7%AB%AF/">前端 </a></span><span id="busuanzi_container_page_pv"> | <span id="busuanzi_value_page_pv"><i class="fa fa-spinner"></i></span><span> 阅读</span></span><span class="post-time"><span class="post-meta-item-text"> | </span><span class="post-meta-item-icon"><i class="fa fa-keyboard-o"></i><span class="post-count"> 980</span><span class="post-meta-item-text"> 字</span></span></span><span class="post-time"> | <span class="post-meta-item-icon"><i class="fa fa-hourglass-half"></i><span class="post-count"> 4</span><span class="post-meta-item-text"> 分钟</span></span></span></div><a class="disqus-comment-count" href="/article/61319.html#vcomment"><span class="waline-comment-count" data-path="/article/61319.html"></span><span> 条评论</span></a><div class="post-content"><p>react+electron实现自定义右键菜单复制粘贴,可以在 electron app 和 其他应用比如 word txt 之间自由复制粘贴。<br>有啥问题欢迎留言一起讨论</p>
|
|
20
|
+
<span id="more"></span>
|
|
21
|
+
<p>首先上图看效果</p>
|
|
22
|
+
<blockquote>
|
|
23
|
+
<p>情况一</p>
|
|
24
|
+
</blockquote>
|
|
25
|
+
<p><img src="https://store.xuehuayu.cn/store/20200429/2020-04-29_120820.png" alt="react+electron实现自定义右键菜单复制粘贴"><br><img src="https://store.xuehuayu.cn/store/20200429/2020-04-29_122103.png" alt="react+electron实现自定义右键菜单复制粘贴"><br><img src="https://store.xuehuayu.cn/store/20200429/2020-04-29_122135.png" alt="react+electron实现自定义右键菜单复制粘贴"></p>
|
|
26
|
+
<blockquote>
|
|
27
|
+
<p>情况二</p>
|
|
28
|
+
</blockquote>
|
|
29
|
+
<p><img src="https://store.xuehuayu.cn/store/20200429/2020-04-29_144724.png" alt="react+electron实现自定义右键菜单复制粘贴"><br><img src="https://store.xuehuayu.cn/store/20200429/2020-04-29_144740.png" alt="react+electron实现自定义右键菜单复制粘贴"><br><img src="https://store.xuehuayu.cn/store/20200429/2020-04-29_144807.png" alt="react+electron实现自定义右键菜单复制粘贴"></p>
|
|
30
|
+
<h4 id="首先设置自定义菜单"><a href="#首先设置自定义菜单" class="headerlink" title="首先设置自定义菜单"></a>首先设置自定义菜单</h4><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> { remote, clipboard } <span class="keyword">from</span> <span class="string">'electron'</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> { <span class="title class_">Menu</span>, <span class="title class_">MenuItem</span> } = remote</span><br><span class="line"></span><br><span class="line">getContextMenu () {</span><br><span class="line"> <span class="comment">//new一个菜单</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">// 监听contextmenu,实现自定义右键菜单</span></span><br><span class="line"> <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'contextmenu'</span>, <span class="keyword">function</span> (<span class="params">e</span>) {</span><br><span class="line"> e.<span class="title function_">preventDefault</span>()</span><br><span class="line"> <span class="keyword">let</span> menu = <span class="keyword">new</span> <span class="title class_">Menu</span>()</span><br><span class="line"></span><br><span class="line"> <span class="comment">// ↓ 情况一:任何情况下,都显示 复制 和 粘贴 按钮</span></span><br><span class="line"> <span class="comment">//添加菜单功能, label: 菜单名称, accelerator:快捷键,click:点击方法</span></span><br><span class="line"> menu.<span class="title function_">append</span>(<span class="keyword">new</span> <span class="title class_">MenuItem</span>({ <span class="attr">label</span>: <span class="string">'复制'</span>, <span class="attr">accelerator</span>: <span class="string">'CommandOrControl+C'</span>, <span class="attr">click</span>: copyString }))</span><br><span class="line"> <span class="comment">//添加菜单分割线</span></span><br><span class="line"> menu.<span class="title function_">append</span>(<span class="keyword">new</span> <span class="title class_">MenuItem</span>({ <span class="attr">type</span>: <span class="string">'separator'</span> }))</span><br><span class="line"> <span class="comment">//添加菜单功能</span></span><br><span class="line"> menu.<span class="title function_">append</span>(<span class="keyword">new</span> <span class="title class_">MenuItem</span>({ <span class="attr">label</span>: <span class="string">'粘贴'</span>, <span class="attr">accelerator</span>: <span class="string">'CommandOrControl+V'</span>, <span class="attr">click</span>: printString }))</span><br><span class="line"> <span class="comment">// ↑ 情况一</span></span><br><span class="line"></span><br><span class="line"> <span class="comment">// ↓ 情况二:可复制时,显示复制,可粘贴时显示粘贴</span></span><br><span class="line"> <span class="keyword">let</span> flag = <span class="literal">false</span> <span class="comment">// menu中是否有菜单项,true有,false没有</span></span><br><span class="line"> <span class="keyword">const</span> tagName = <span class="variable language_">document</span>.<span class="property">activeElement</span>.<span class="property">tagName</span> <span class="comment">// 焦点元素的tagName</span></span><br><span class="line"> <span class="keyword">const</span> str = clipboard.<span class="title function_">readText</span>() <span class="comment">// 剪贴板中的内容</span></span><br><span class="line"> <span class="keyword">const</span> selectStr = _this.<span class="title function_">getSelection</span>() <span class="comment">// 选中的内容</span></span><br><span class="line"> <span class="keyword">const</span> text = e.<span class="property">target</span>.<span class="property">innerText</span> || <span class="string">''</span> <span class="comment">// 目标标签的innerText</span></span><br><span class="line"> <span class="keyword">const</span> value = e.<span class="property">target</span>.<span class="property">value</span> || <span class="string">''</span> <span class="comment">// 目标标签的value</span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (selectStr) { <span class="comment">// 如果有选中内容</span></span><br><span class="line"> flag = <span class="literal">true</span></span><br><span class="line"> <span class="comment">// 在 选中的元素或者输入框 上面点右键,这样在选中后点别处就不会出现右键复制菜单</span></span><br><span class="line"> <span class="keyword">if</span> (text.<span class="title function_">indexOf</span>(selectStr) !== -<span class="number">1</span> || value.<span class="title function_">indexOf</span>(selectStr) !== -<span class="number">1</span>) menu.<span class="title function_">append</span>(<span class="keyword">new</span> <span class="title class_">MenuItem</span>({ <span class="attr">label</span>: <span class="string">'复制'</span>, <span class="attr">click</span>: copyString }))</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (str && (tagName === <span class="string">'INPUT'</span> || tagName === <span class="string">'TEXTAREA'</span>)) { <span class="comment">// 若为输入框 且 剪贴板中有内容,则显示粘贴菜单</span></span><br><span class="line"> flag = <span class="literal">true</span></span><br><span class="line"> menu.<span class="title function_">append</span>(<span class="keyword">new</span> <span class="title class_">MenuItem</span>({ <span class="attr">label</span>: <span class="string">'粘贴'</span>, <span class="attr">click</span>: printString }))</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// ↑ 情况二</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="comment">// menu中有菜单项 且(有选中内容 或 剪贴板中有内容)</span></span><br><span class="line"> <span class="keyword">if</span> (flag && (_this.<span class="title function_">getSelection</span>() || str)) {</span><br><span class="line"> <span class="comment">// 将此menu菜单作为 当前窗口 remote.getCurrentWindow() 中的上下文菜单弹出。</span></span><br><span class="line"> menu.<span class="title function_">popup</span>(remote.<span class="title function_">getCurrentWindow</span>())</span><br><span class="line"> }</span><br><span class="line"> }, <span class="literal">false</span>)</span><br><span class="line"> <span class="comment">// 写入剪贴板方法</span></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">copyString</span> () {</span><br><span class="line"> <span class="keyword">const</span> str = <span class="title function_">getSelection</span>() <span class="comment">// 获取选中内容</span></span><br><span class="line"> clipboard.<span class="title function_">writeText</span>(str) <span class="comment">// 写入剪贴板</span></span><br><span class="line"> }</span><br><span class="line"> <span class="comment">// 获取剪贴版内容写入当前焦点元素中</span></span><br><span class="line"> <span class="keyword">function</span> <span class="title function_">printString</span> () {</span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">document</span>.<span class="property">activeElement</span>) {</span><br><span class="line"> <span class="keyword">const</span> str = clipboard.<span class="title function_">readText</span>() <span class="comment">// 获取剪贴板内容</span></span><br><span class="line"> <span class="variable language_">document</span>.<span class="property">activeElement</span>.<span class="property">value</span> = str <span class="comment">// 写入焦点元素</span></span><br><span class="line"> clipboard.<span class="title function_">clear</span>() <span class="comment">// 清空剪贴板</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">// 获取选中内容</span></span><br><span class="line">getSelection () {</span><br><span class="line"> <span class="keyword">var</span> text = <span class="string">''</span></span><br><span class="line"> <span class="keyword">if</span> (<span class="variable language_">window</span>.<span class="property">getSelection</span>) { <span class="comment">// 除IE9以下 之外的浏览器</span></span><br><span class="line"> text = <span class="variable language_">window</span>.<span class="title function_">getSelection</span>().<span class="title function_">toString</span>()</span><br><span class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (<span class="variable language_">document</span>.<span class="property">selection</span> && <span class="variable language_">document</span>.<span class="property">selection</span>.<span class="property">type</span> !== <span class="string">'Control'</span>) { <span class="comment">//IE9以下,可不考虑</span></span><br><span class="line"> text = <span class="variable language_">document</span>.<span class="property">selection</span>.<span class="title function_">createRange</span>().<span class="property">text</span></span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (text) {</span><br><span class="line"> <span class="keyword">return</span> text</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure>
|
|
31
|
+
|
|
32
|
+
<h3 id="受控组件使用鼠标点击粘贴无法触发onchange问题"><a href="#受控组件使用鼠标点击粘贴无法触发onchange问题" class="headerlink" title="受控组件使用鼠标点击粘贴无法触发onchange问题"></a>受控组件使用鼠标点击粘贴无法触发onchange问题</h3><p>这种情况,可以在提交数据时,使用ref方式,直接调用更新数据的方法来实现数据更改,<br>我是这样写的</p>
|
|
33
|
+
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 提交数据时</span></span><br><span class="line"><span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">acct</span>.<span class="property">value</span>) {</span><br><span class="line"> <span class="variable language_">this</span>.<span class="title function_">changeData</span>(<span class="string">'username'</span>, <span class="variable language_">this</span>.<span class="property">acct</span>.<span class="property">value</span>)</span><br><span class="line">}</span><br><span class="line"><span class="comment">/* 提交数据 */</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">// 输入框</span></span><br><span class="line"><input</span><br><span class="line"> ref={<span class="function"><span class="params">ref</span> =></span> { <span class="variable language_">this</span>.<span class="property">ipt</span> = ref }</span><br><span class="line"> onChange={<span class="function"><span class="params">evt</span> =></span> <span class="title function_">changeData</span>(<span class="string">'username'</span>, evt.<span class="property">target</span>.<span class="property">value</span>)}</span><br><span class="line"> <span class="comment">/* other props */</span></span><br><span class="line">/></span><br></pre></td></tr></table></figure>
|
|
34
|
+
|
|
35
|
+
<h3 id="实现快捷键功能"><a href="#实现快捷键功能" class="headerlink" title="实现快捷键功能"></a>实现快捷键功能</h3><p>快捷方式使用 register 方法在 globalShortcut 模块中注册, 即:</p>
|
|
36
|
+
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> { globalShortcut } <span class="keyword">from</span> <span class="string">'electron'</span></span><br><span class="line"><span class="comment">// 系统默认快捷键在app中同样生效。但是若设置了快捷键,且和系统原有的相同,会覆盖系统的。</span></span><br><span class="line">globalShortcut.<span class="title function_">register</span>(<span class="string">'CommandOrControl+C'</span>, <span class="function">() =></span> {</span><br><span class="line"> <span class="keyword">try</span> {</span><br><span class="line"> <span class="keyword">const</span> str = <span class="title function_">getSelection</span>()</span><br><span class="line"> clipboard.<span class="title function_">writeText</span>(str)</span><br><span class="line"> } <span class="keyword">catch</span> (e){}</span><br><span class="line">})</span><br><span class="line"></span><br><span class="line"><span class="comment">// 系统默认快捷键在app中同样生效。但是若设置了快捷键,且是系统原有的,会覆盖系统的。</span></span><br><span class="line">globalShortcut.<span class="title function_">register</span>(<span class="string">'CommandOrControl+V'</span>, <span class="function">() =></span> {</span><br><span class="line"> <span class="keyword">try</span> {</span><br><span class="line"> <span class="keyword">const</span> str = clipboard.<span class="title function_">readText</span>()</span><br><span class="line"> <span class="variable language_">document</span>.<span class="property">activeElement</span>.<span class="property">value</span> = str</span><br><span class="line"> clipboard.<span class="title function_">clear</span>()</span><br><span class="line"> } <span class="keyword">catch</span> (e){}</span><br><span class="line">})</span><br><span class="line"></span><br></pre></td></tr></table></figure>
|
|
37
|
+
|
|
38
|
+
<blockquote>
|
|
39
|
+
<h4 id="避免覆盖系统范围的键盘快捷键"><a href="#避免覆盖系统范围的键盘快捷键" class="headerlink" title="避免覆盖系统范围的键盘快捷键."></a>避免覆盖系统范围的键盘快捷键.</h4></blockquote>
|
|
40
|
+
<p>注册全局快捷方式时, 请务必注意目标操作系统中的现有默认值, 以免覆盖任何现有行为.有关每个操作系统键盘快捷键的概述, 请查看这些文档:</p>
|
|
41
|
+
<ul>
|
|
42
|
+
<li><a target="_blank" rel="noopener" href="https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/OSXHIGuidelines/Keyboard.html">macOS</a></li>
|
|
43
|
+
<li><a target="_blank" rel="noopener" href="http://windows.microsoft.com/en-us/windows-10/keyboard-shortcuts">Windows</a></li>
|
|
44
|
+
<li><a target="_blank" rel="noopener" href="https://developer.gnome.org/hig/stable/keyboard-input.html.en">Linux</a></li>
|
|
45
|
+
</ul>
|
|
46
|
+
</div><iframe src="/donate/?AliPayQR=https://store.xuehuayu.cn/store/public/alipay_qr.jpg&WeChatQR=https://store.xuehuayu.cn/store/public/wechat_qr.png&UnionPayQR=null&GitHub=null&BTCQR=null&BTCKEY=null&PayPal=https://www.paypal.com/paypalme/OrdinaryPerson" style="overflow-x:hidden; overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者:</strong>雪花雨</li><li class="post-copyright-link"><strong>本文链接:</strong><a href="/article/61319.html">https://xuehuayu.cn/article/61319.html</a></li><li class="post-copyright-license"><strong>版权声明:</strong>① 标为原创的文章为博主原创,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。② 转载文章来自网络,已标明出处,<a href="mailto:cainiaoblog@126.com">侵删</a>。</li></ul></div><br><div class="tags"><a href="/tags/%E5%8E%9F%E5%88%9B/">原创</a></div><div class="post-nav"><a class="pre" href="/article/33713.html">前端面试之手写Promise</a><a class="next" href="/article/3447.html">解决Code 98: Valine 初始化失败,请检查 av-min.js 版本</a></div><div id="vcomment"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.min.css"><script src="//cdn.jsdelivr.net/npm/@waline/client@v2/dist/waline.js"></script><script>const origin = window.location.origin
|
|
47
|
+
const serverURL = origin.includes('cainiaoblog') ? 'https://cmts.cainiaoblog.cn' : 'https://cmts.xuehuayu.cn'
|
|
48
|
+
const locale = {
|
|
49
|
+
placeholder: '请正确填写昵称和邮箱,方便接收回复通知~',
|
|
50
|
+
sofa: '沙发空缺中,还不快抢~',
|
|
51
|
+
};
|
|
52
|
+
Waline.init({
|
|
53
|
+
el: '#vcomment',
|
|
54
|
+
serverURL: serverURL,
|
|
55
|
+
pageSize: '20',
|
|
56
|
+
visitor: true, // 阅读量统计
|
|
57
|
+
requiredMeta: ['nick', 'mail'],
|
|
58
|
+
emoji: [
|
|
59
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/weibo',
|
|
60
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/qq',
|
|
61
|
+
'https://cdn.jsdelivr.net/gh/walinejs/emojis@1.0.0/tw-emoji',
|
|
62
|
+
],
|
|
63
|
+
locale,
|
|
64
|
+
pageview: true
|
|
65
|
+
})
|
|
66
|
+
</script></div></div></div><div class="pure-u-1 pure-u-md-1-4 fixed-search hidden_mid_and_down"><div id="sidebar"><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/search.min.js"></script><div class="widget"><div class="widget-search"><input class="search" type="radio" name="search" value="baidu" id="baidu" checked="checked"/><label class="label" for="baidu" title="百度全站搜索">百度</label><input class="search" type="radio" name="search" value="google" id="google"/><label class="label" for="google" title="谷歌全站搜索">谷歌</label><input class="search" type="radio" name="search" value="self" id="self"/><label class="label" for="self" title="使用站内搜索">站内</label></div><div class="widget" id="search"><form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"/><input type="hidden" name="si" value="xuehuayu.cn"/><input type="hidden" name="cl" value="3"/><input type="hidden" name="ct" value="2097152"/><input type="hidden" name="s" value="on"/><input class="search-submit" type="submit" value=""/></form></div></div><script>$('input[type=radio][name=search]').change(function() {
|
|
67
|
+
var val = $(this).val()
|
|
68
|
+
var self = '<div class="search-form"><input id="local-search-input" placeholder="站内搜索,首次慢" type="search" name="q" results="0"><input class="search-submit" type="submit" value=""/><div id="local-search-result"></div></div>'
|
|
69
|
+
var google = '<form class="search-form" action="//www.google.com/search" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="q" maxlength="30" placeholder="谷歌全站搜索"><input type="hidden" name="sitesearch" value="xuehuayu.cn"><input class="search-submit" type="submit" value=""/></form>'
|
|
70
|
+
var baidu = '<form class="search-form" action="//www.baidu.com/baidu" method="get" accept-charset="utf-8" target="_blank"><input type="search" name="word" maxlength="30" placeholder="百度全站搜索"><input type="hidden" name="si" value="xuehuayu.cn"><input type="hidden" name="cl" value="3"><input type="hidden" name="ct" value="2097152"><input type="hidden" name="s" value="on"><input class="search-submit" type="submit" value=""/></form>'
|
|
71
|
+
|
|
72
|
+
if (val === 'self') {
|
|
73
|
+
$('#search').html(self)
|
|
74
|
+
var search_path = 'search.xml';
|
|
75
|
+
if (search_path.length == 0) {
|
|
76
|
+
search_path = 'search.xml';
|
|
77
|
+
}
|
|
78
|
+
var path = 'https://cdn.staticaly.com/gh/npljy/npljy.github.io/main/' + search_path;
|
|
79
|
+
searchFunc(path, 'local-search-input', 'local-search-result');
|
|
80
|
+
} else if (val === 'baidu') {
|
|
81
|
+
$('#search').html(baidu)
|
|
82
|
+
} else if (val === 'google') {
|
|
83
|
+
$('#search').html(google)
|
|
84
|
+
}
|
|
85
|
+
})</script><div class="widget widget-wxmp"><img alt="微信公众号" width="100%" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/mp-mini.jpg"/></div><div class="widget widget-categories"><div class="widget-title"><i class="fa fa-folder-o"> 分类</i></div><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/CDN/">CDN</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/IDE/">IDE</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/git/">git</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/hexo/">hexo</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%85%AC%E5%85%B1%E8%8A%82%E6%97%A5/">公共节日</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%88%86%E4%BA%AB/">分享</a><span class="category-list-count">29</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/">前端</a><span class="category-list-count">191</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">1</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%89%8D%E7%AB%AF/%E6%B5%8F%E8%A7%88%E5%99%A8/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/">网络协议</a><span class="category-list-count">1</span></li></ul></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%8D%9A%E5%AE%A2/">博客</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/">广告过滤</a><span class="category-list-count">8</span><ul class="category-list-child"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%B9%BF%E5%91%8A%E8%BF%87%E6%BB%A4/%E8%A7%86%E9%A2%91%E7%94%B5%E8%A7%86%E5%B0%8F%E8%AF%B4%E6%BC%AB%E7%94%BB%E8%B5%84%E8%AE%AF%E9%9F%B3%E4%B9%90/">视频电视小说漫画资讯音乐</a><span class="category-list-count">2</span></li></ul></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%AD%A3%E5%88%99/">正则</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%B5%8F%E8%A7%88%E5%99%A8/">浏览器</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E7%AE%97%E6%B3%95/">算法</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%B5%84%E8%AE%AF/">资讯</a><span class="category-list-count">16</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E8%BD%BB%E6%9D%BE%E4%B8%80%E5%88%BB/">轻松一刻</a><span class="category-list-count">1</span></li></ul></div><div class="widget widget-tags"><div class="widget-title"><i class="fa fa-star-o"> 标签</i></div><div class="tagcloud"><a href="/tags/%E5%8E%9F%E5%88%9B/" style="font-size: 15px;">原创</a> <a href="/tags/%E8%BD%AC%E8%BD%BD/" style="font-size: 15px;">转载</a> <a href="/tags/%E6%89%8B%E5%86%99/" style="font-size: 15px;">手写</a> <a href="/tags/%E7%96%AB%E6%83%85/" style="font-size: 15px;">疫情</a> <a href="/tags/%E5%A8%B1%E4%B9%90/" style="font-size: 15px;">娱乐</a></div></div><div class="widget widget-recent-posts"><div class="widget-title"><i class="fa fa-file-o"> 最近文章</i></div><ul class="post-list"><li class="post-list-item"><a class="post-list-link" href="/article/c5576490.html">面试准备</a></li><li class="post-list-item"><a class="post-list-link" href="/article/84c9ccd6.html">精读《SolidJS》</a></li><li class="post-list-item"><a class="post-list-link" href="/article/53803e6.html">git提交注释规范</a></li><li class="post-list-item"><a class="post-list-link" href="/article/a4145266.html">前端数组拍平flat一行代码</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bedea419.html">一道前端this面试题</a></li><li class="post-list-item"><a class="post-list-link" href="/article/bf7e7421.html">git多账号配置</a></li></ul></div><div class="widget widget-links"><div class="widget-title"><i class="fa fa-external-link"> 友情链接</i></div><ul></ul><a href="https://github.com/npljy?utm_source=xuehuayu.cn" title="GitHub" target="_blank">GitHub</a><ul></ul><a href="https://laonongmin.online?utm_source=xuehuayu.cn" title="看看" target="_blank">看看</a><ul></ul><a href="https://cainiaoblog.cn?utm_source=xuehuayu.cn" title="菜鸟博客" target="_blank">菜鸟博客</a><ul></ul><a href="mailto:cainiaoblog@126.com" title="友链联系" target="_blank">友链联系</a></div></div></div><div class="pure-u-1 pure-u-md-3-4"><div id="footer"><div class="flex-block justify-center align-center flex-wrap"><a class="gxba-link" id="gxba" rel="nofollow" target="_blank" href="http://beian.miit.gov.cn/">京ICP备20007647号-2</a><a class="gaba-link" id="gaba-link" rel="nofollow" target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031264"><img class="nofancybox" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/gaba.png" alt=""/><span id="gaba">京公网安备 11010802031264号</span><span style="padding-right: 10px;"></span></a><span>Copyright © 2023 </span><a href="/." rel="nofollow">前端壹菜鸟. </a><script>(function(){
|
|
86
|
+
var cnb =window.location.origin.indexOf('cainiaoblog') !==-1
|
|
87
|
+
if (cnb) {
|
|
88
|
+
var gxba =document.getElementById('gxba')
|
|
89
|
+
var gaba =document.getElementById('gaba')
|
|
90
|
+
var gabaLink =document.getElementById('gaba-link')
|
|
91
|
+
gxba.innerText ='京ICP备20007647号-1'
|
|
92
|
+
gaba.innerText ='京公网安备 11010802031254号'
|
|
93
|
+
gabaLink.setAttribute('href','http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802031254')
|
|
94
|
+
}
|
|
95
|
+
})()</script></div><div class="flex-block justify-center align-center flex-wrap"><a rel="nofollow" target="_blank" href="https://v6.51.la/s/Guz3lwHCsVme9Cu"><div class="busuanzi_container" id="busuanzi_container"><span class="busuanzi_container_site_pv" id="busuanzi_container_site_pv">访问量:<span id="busuanzi_value_site_pv"><i class="fa fa-spinner"></i></span></span><span class="busuanzi_container_site_uv" id="busuanzi_container_site_uv">访客数:<span id="busuanzi_value_site_uv"><i class="fa fa-spinner"></i></span></span><span style="padding-right: 10px;"></span></div></a><a rel="nofollow" target="_blank" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral"><span style="font-weight:bold;letter-spacing: 1px;">本网站由 </span><img class="nofancybox" height="32" style="vertical-align: middle" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/img/upy_logo.min.svg" alt=""/><span style="font-weight:bold;letter-spacing: 1px;">提供CDN加速/云存储服务</span></a><span style="padding-right: 10px;"></span><a rel="nofollow" style="font-size:18px;font-weight:bold;vertical-align: middle" target="_blank" title="注册就送代金券可直接使用" href="https://console.upyun.com/register/?invite=HyDsjZHIL">注册</a></div></div></div></div><a class="show" id="rocket" href="#top"></a><div class="darkmode-toggle">🌓</div><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/totop.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/dark.min.js" async></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/codeblock-resizer.min.js"></script><script type="text/javascript" src="//cdn.staticaly.com/gh/npljy/npljy.github.io/main/js/smartresize.min.js"></script></div></body></html>
|