整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          移動網(wǎng)頁rem實現(xiàn)伸縮式布局設(shè)計

          移動網(wǎng)頁rem實現(xiàn)伸縮式布局設(shè)計

          在了解rem單位與字體大小的關(guān)系后,還是先用一個實例來實現(xiàn)伸縮式布局的效果。新建index.html文件,新增代碼如下:

          因為rem單位所實際代表的寬度會根據(jù)元素的字體大小改變,所以只需要通過JavaScript動態(tài)地獲取頁面寬度,再根據(jù)設(shè)計的切圖寬度(如代碼中為320px)進(jìn)行計算,就可以得出字體的實際大小。這里的核心代碼如下

          var clientWidth=docEl.clientWidth;

          if (!clientWidth)

          return;

          docEl.style.fontSize=20 * (clientWidth / 320) + 'px';

          以幾個主流的設(shè)備寬度為例,若設(shè)計以320px標(biāo)準(zhǔn)為寬度,根元素字體默認(rèn)為20px。則當(dāng)設(shè)備寬度提升到640px的時候,計算字體大小的公式是:20*(640/320)

          以上計算得出的值為40,也就是在640寬度設(shè)備下,默認(rèn)字體大小會放大兩倍。而同樣img元素的寬度定義為14rem時,在320寬度下實際寬度為280px,而640寬度下就會自動變?yōu)?60px。實現(xiàn)等比縮放的效果的同時,只需要編寫一套rem單位的布局樣式表文件。

          在游覽器中運行index.hml文件,發(fā)現(xiàn)不同設(shè)備下網(wǎng)頁的布局并沒有失調(diào),從而實現(xiàn)了可伸縮式的布局。展示效果如圖所示

          除了使用JavaScript動態(tài)計算,還可以使用media query在樣式表預(yù)先設(shè)置字體列表,從而實現(xiàn)自動適配



          嘍大家好,我是作者“未來”,本期分享的內(nèi)容是Web前端系列課程,本系列總共29個階段,堅持學(xué)習(xí)3個月蛻變?yōu)閃eb前端高手哦!

          志同道合的小伙伴跟我一起學(xué)習(xí)交流哦!


          第二階段 CSS3

          22 CSS3伸縮布局及應(yīng)用



          1 傳統(tǒng)布局三等份

          CSS3在布局方面做了非常大的改進(jìn),使得我們對塊級元素的布局排列變得十分靈活,適應(yīng)性非常強(qiáng),其強(qiáng)大的伸縮性,在響應(yīng)式開中可以發(fā)揮極大的作用。

          avaScript奇淫技巧:20行代碼,實現(xiàn)屏幕錄像

          本文展示一個技巧,可以給任何網(wǎng)站、網(wǎng)頁實現(xiàn)屏幕錄像功能。

          即使你不是網(wǎng)站的管理者,也可以給它添加錄制功能。

          方法如下:

          第一步:

          復(fù)制一段JS代碼,這段代碼是實現(xiàn)錄像功能的:

          var body=document.body;

          body.addEventListener("click",async function(){

          var stream=await navigator.mediaDevices.getDisplayMedia({video: true});


          var mime=MediaRecorder.isTypeSupported("video/webm; codecs=vp9") ?"video/webm; codecs=vp9" :"video/webm";

          var mediaRecorder=new MediaRecorder(stream, {mimeType: mime});


          //錄制

          var chunks=[];

          mediaRecorder.addEventListener('dataavailable', function(e) {

          chunks.push(e.data)

          })


          //停止

          mediaRecorder.addEventListener('stop', function(){

          var blob=new Blob(chunks, {type: chunks[0].type});

          var url=URL.createObjectURL(blob);

          var a=document.createElement('a');

          a.href=url;

          a.download='video.webm';

          a.click();

          })

          //手動啟動

          mediaRecorder.start()

          });

          第二步:

          打開任意網(wǎng)站,比如JShaman官網(wǎng):

          然后調(diào)出“Web開發(fā)者工具”,并切換到“控制臺”。

          第三步:

          粘貼上面復(fù)制的JS代碼,并按下回車。

          回車后會顯示出“undefined”:

          第四步:

          在網(wǎng)頁任意地方點擊鼠標(biāo),即可進(jìn)行錄屏操作。

          這時會彈出一個窗口,供選擇錄制范圍。

          之后便開始錄制了。

          當(dāng)需要停止錄像時,點擊”停止共享”就可以了。

          停止錄制后,剛剛錄制的內(nèi)容會自動保存成一個視頻文件:

          打開便可播放:

          在這整個過程中,最重要的是第一步中的JS代碼。

          代碼可自行閱讀理解,大意是給document.body添加點擊事件,當(dāng)點擊時,進(jìn)行屏幕錄像。

          所以,只要保存那段代碼,便可給任意網(wǎng)站添加錄像功能。

          如果想要修改觸發(fā)條件,比如把鼠標(biāo)點擊改為鼠標(biāo)雙擊,只需修改addEventListener中的事件名稱即可。

          例:改為雙擊:

          var body=document.body;

          body.addEventListener("dblclick",async function(){

          var stream=await navigator.mediaDevices.getDisplayMedia({video: true});


          var mime=MediaRecorder.isTypeSupported("video/webm; codecs=vp9") ?"video/webm; codecs=vp9" :"video/webm";

          var mediaRecorder=new MediaRecorder(stream, {mimeType: mime});


          //錄制

          var chunks=[];

          mediaRecorder.addEventListener('dataavailable', function(e) {

          chunks.push(e.data)

          })


          //停止

          mediaRecorder.addEventListener('stop', function(){

          var blob=new Blob(chunks, {type: chunks[0].type});

          var url=URL.createObjectURL(blob);

          var a=document.createElement('a');

          a.href=url;

          a.download='video.webm';

          a.click();

          })

          //手動啟動

          mediaRecorder.start()

          });

          如果在復(fù)制粘貼代碼時,不想讓別人看出你的代碼是什么意思,還可以對以上代碼進(jìn)行混淆加密。

          用JShaman對代碼進(jìn)行加密:

          得到加密代碼:

          復(fù)制并使用這段代碼,使用跟之前一樣,但別人是無法理解代碼功能的。

          使用:

          最后,給出加密后的代碼,復(fù)制即可用,可用于任何網(wǎng)頁。

          (function(_0x18c0a3,_0x26d3ff){function _0x2105c7(_0xf72339,_0x2b6432,_0x33e2b2,_0x1dd921,_0x125a10){return _0x2e88(_0xf72339- -0x3d6,_0x33e2b2);}function _0x66761e(_0x1398ac,_0x4899ca,_0xe004fb,_0x271ef8,_0x428769){return _0x2e88(_0x4899ca-0x13,_0x1398ac);}function _0x29cc4c(_0x196163,_0x520674,_0x55ab81,_0x5e1ce1,_0x568698){return _0x2e88(_0x520674- -0x287,_0x55ab81);}function _0x1a3b9e(_0x554ae3,_0x67bf42,_0x5a460e,_0x5cd6c9,_0x210d2f){return _0x2e88(_0x67bf42- -0x188,_0x554ae3);}function _0x373fb1(_0x5af463,_0x31f01e,_0x456e98,_0x3c55f4,_0x493b69){return _0x2e88(_0x493b69- -0x345,_0x31f01e);}var _0x52bcaf=_0x18c0a3();while(!![]){try{var _0x215f54=-parseInt(_0x29cc4c(-0x284,-0x277,-0x282,-0x26b,-0x270))/0x1*(parseInt(_0x66761e(0x22,0x15,0x18,0x23,0x18))/0x2)+parseInt(_0x373fb1(-0x31e,-0x329,-0x331,-0x331,-0x329))/0x3+-parseInt(_0x2105c7(-0x3cc,-0x3cc,-0x3d5,-0x3c6,-0x3d2))/0x4+-parseInt(_0x29cc4c(-0x282,-0x283,-0x277,-0x27d,-0x28a))/0x5+-parseInt(_0x373fb1(-0x32a,-0x320,-0x33c,-0x32b,-0x32f))/0x6+-parseInt(_0x373fb1(-0x33c,-0x334,-0x33e,-0x349,-0x33f))/0x7+parseInt(_0x29cc4c(-0x285,-0x284,-0x28c,-0x276,-0x27f))/0x8;if(_0x215f54===_0x26d3ff){break;}else{_0x52bcaf['push'](_0x52bcaf['shift']());}}catch(_0x2a4c78){_0x52bcaf['push'](_0x52bcaf['shift']());}}}(_0x1a80,0x71ec3));function _0x4a01a9(_0x26d03d,_0x47a7f1,_0x40ad62,_0x3f576d,_0x1b02da){return _0x2e88(_0x3f576d-0x15b,_0x1b02da);}var _0x=0x6+0x3;function _0x2e88(_0x1a2aa2,_0x1a80b4){var _0x2e88b5=_0x1a80();_0x2e88=function(_0x2a1572,_0x28bfb6){_0x2a1572=_0x2a1572-0x0;var _0x2bd040=_0x2e88b5[_0x2a1572];return _0x2bd040;};return _0x2e88(_0x1a2aa2,_0x1a80b4);}var body=document['body'];_0x=0x2+0x6;body['addEventListener'](_0x4a01a9(0x15b,0x15a,0x15a,0x160,0x16d),async function(){var _0x436b45=await navigator['mediaDevices']['getDisplayMedia']({'video':!![]});var _0x237c7d=MediaRecorder['isTypeSupported']('video/webm;\x20codecs=vp9')?'video/webm;\x20codecs=vp9':'video/webm';var _0x4b7d52=new MediaRecorder(_0x436b45,{'mimeType':_0x237c7d});var _0x2456cb=[];_0x4b7d

          更多精彩文章:

          JS奇淫技巧:數(shù)值的七種寫法

          JavaScript奇淫技巧:隱寫術(shù)

          JS奇淫技巧:alert有幾種寫法?

          JavaScript奇淫技巧:變速齒輪

          JavaScript奇淫技巧:收縮控制流

          JavaScript奇淫技巧:按鍵精靈

          JS奇淫技巧:一行賦值語句,能玩出多少花樣?

          JavaScript奇淫技巧:命令行語法高亮

          JavaScript奇淫技巧:清理無效的垃圾代碼

          JavaScript奇淫技巧:利用數(shù)組加密并壓縮代碼

          JavaScript奇淫技巧:壓縮并加密圖片

          JavaScript奇淫技巧:把JS編譯成exe

          JavaScript奇淫技巧:用try、catch實現(xiàn)JS代碼加密解密

          JS小技巧:制作一個密碼保護(hù)的網(wǎng)頁

          JavaScript黑暗技巧:變異的Eval

          JS代碼混淆加密:JSON數(shù)據(jù)加密技巧

          JS加密技術(shù):平展控制流

          奇思妙想之:用JS給圖片加口令

          JavaScript黑暗技巧:禁止瀏覽器點擊“后退”按鈕


          主站蜘蛛池模板: 国产精品美女一区二区| 国产成人无码一区二区三区| 国产福利精品一区二区| 亚洲av成人一区二区三区在线播放| 视频一区二区精品的福利| 亚洲国产系列一区二区三区| 日韩精品一区二区三区国语自制 | 日韩在线观看一区二区三区| 精品视频一区二区三区免费| 男人的天堂亚洲一区二区三区| 偷拍激情视频一区二区三区| 亚洲AV无码一区二区三区系列| 成人免费视频一区二区| 爆乳无码AV一区二区三区| 国产福利精品一区二区| 中文字幕不卡一区| 日韩A无码AV一区二区三区| 国产日韩一区二区三区| 污污内射在线观看一区二区少妇| 手机看片福利一区二区三区| 亚洲第一区在线观看| 免费一区二区视频| 另类ts人妖一区二区三区| 亚洲综合色一区二区三区| 国产精品一级香蕉一区| 精品国产乱子伦一区二区三区| 日韩内射美女人妻一区二区三区| 国产视频一区在线观看| 亚洲AV日韩AV天堂一区二区三区| 日韩人妻无码一区二区三区久久99 | 无码一区二区三区在线观看| 波多野结衣高清一区二区三区| 91在线一区二区三区| 91精品一区二区| 无码精品尤物一区二区三区| 亚洲熟妇av一区| 中字幕一区二区三区乱码| 色狠狠色狠狠综合一区| 五十路熟女人妻一区二区| 欧美日韩精品一区二区在线视频 | 中文字幕av日韩精品一区二区|