学了点技术,我要开始装X了(四)

简介: 接上文。

第十三式:让浏览器告诉大家你正在浏览不正经网站


上班滑水摸鱼,同事来了赶紧切换浏览器界面?何不直接让同事以为你在浏览某些“正经”网站?


以下代码,当切换浏览器 tab,使得页面不可见时,会更改不可见页面的 title 和 icon 显示效果,可以直接复制以下代码在控制台尝试。


let interval = null;
(function () {
  // 获取icon所在link,rel*="icon"是为了兼容rel="shortcut icon"的情况
  const Link = document.querySelector('link[rel*="icon"]');
  const sourceTitile = document.title;
  const sourceLink = Link.href;
  document.addEventListener('visibilitychange', function () {
    if (document.hidden) {
      // 让title文字动起来,更加醒目
      interval = setInterval(scroll, 1000);
      // 修改title,这里也可以直接写文字,之所以用编码后的嘛,🤔,是因为不想让你一眼看出代码里下了毒...
      document.title = decodeURI(
        '%E6%82%A8%E6%AD%A3%E5%9C%A8%E6%B5%8F%E8%A7%88%E9%BB%84%E8%89%B2%E7%BD%91%E7%AB%99...'
      );
      Link.href =
        'https://king-hcj.github.io/images/posts/zhuangbility100/nh.gif?raw=true';
      Link.type = 'image/gif';
    } else {
      clearInterval(interval);
      document.title = sourceTitile;
      Link.href = sourceLink;
    }
  });
})();
function scroll() {
  // 让title文字动起来,更加醒目
  const titleInfo = document.title;
  const firstInfo = titleInfo.charAt(0);
  const lastInfo = titleInfo.substring(1, titleInfo.length);
  document.title = lastInfo + firstInfo;
}


效果图:


d83419e257186b4b383e8ad3f4dacf0a.png


第十四式:带有 Id 属性的元素,会创建全局变量


关于 HTML 中的 Id 属性,想必您已经再熟悉不过了:


  • id 属性规定 HTML 元素的唯一的 id;


  • id 在 HTML 文档中必须是唯一的;


  • id 属性可用作链接锚(link anchor),通过 JavaScript(HTML DOM)或通过 CSS 为带有指定 id 的元素改变或添加样式。


对于 DOM 树中具有 ID 的给定 HTML 元素,可以使用其 ID 作为变量名来检索 div。所以,下面的console.log(foo)会打印出 id 为 foo 的这个 div DOM 元素:


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
  </head>
  <body>
    <div id="foo"></div>
    <script type="text/javascript">
      console.log(foo); // 会输出id为foo的div 这个 DOM元素
    </script>
  </body>
</html>


如果您不信,那就此时打开您的网站看看:


e630ef29edc2225d135c2713fe2c0687.png


那么,这是否也意味着可以在这些浏览器中使用它来替代 getElementById 方法呢?实际项目中最好还是老老实实该怎么写就怎么写,毕竟如果这样,大概率你会被后来的接手者或者同事问候的 😄 ~


  • Do DOM tree elements with ids become global variables?[39]


第十五式:利用 a 标签解析 url


很多时候我们有从一个 URL 中提取域名,查询关键字,变量参数值等的需要,而万万没想到可以让浏览器方便地帮我们完成这一任务而不用我们写正则去抓取。方法是在 JS 代码里先创建一个 a 标签然后将需要解析的 URL 赋值给 a 的 href 属性,然后就得到了一切我们想要的了。


var a = document.createElement('a');
a.href = 'https://juejin.cn/user/2796746682939054/posts';
console.log(a.host);


利用这一原理,稍微扩展一下,就得到了一个更加健壮的解析 URL 各部分的通用方法了,下面提供一个网上常见的封装示例。


function urlParse(url, key) {
  var a = document.createElement('a');
  a.href = url;
  var result = {
    href: url,
    protocol: a.protocol.replace(':', ''),
    port: a.port,
    query: a.search,
    params: (function () {
      var ret = {},
        centArr,
        seg = a.search.replace(/^\?/, '').replace(/^\?/, '').split('&');
      for (i = 0, len = seg.length; i < len; i++) {
        if (!seg[i]) {
          continue;
        }
        centArr = seg[i].split('=');
        ret[centArr[0]] = centArr[1];
      }
      return ret;
    })(),
    hash: a.hash,
    file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],
    path: a.pathname.replace(/^([^\/])/, '/$1'),
    relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],
    segments: a.pathname.replace(/^\//, '').split('/'),
  };
  a = null;
  return key ? result[key] : result;
}


H5 有新的 API URL 也可以快速的处理一个链接,相对更加简洁。


var url = new URL('https://www.baidu.com/')
url.hash
...


  • 这些鲜为人知的前端冷知识,你都 GET 了吗?


第十六式:一个可以在浏览器运行 Node.js 的神器


在最新的 Google I/O 主题演讲中 stackblitz 向大家介绍了他们与 Next.jsGoogle 团队合作开发的在线 IDE WebContainers


几年前,我们意识到网络正朝着一个关键的拐点发展。WebAssembly 的出现让我们可以有能力编写基于 WebAssembly 的操作系统,这个操作系统的功能强大到可以完全在浏览器中运行 Node.js。我们设计了一个比本地环境更快,更安全和一致的高级开发环境,可以实现无缝代码协作,而不需要设置本地环境,两年后的今天,他终于诞生了!


bdeeb83bb67f0dc5d0aed8958567d6e1.png


官网声称`StackBlitz.com`[40]是这个星球上最快、最安全的开发环境,它的 logo 也是一个闪电的标识:


d8f3545294aa461e55247084515ade19.png


WebContainers 允许你创建一个完整的 Node.js环境,它可以在毫秒内启动,并且可以实现一键联机和链接共享。这个环境具有 VS Code 强大的编辑功能,完整的终端,还有 npm 等功能。它也完全在你的浏览器中运行,这带来了一些关键的好处:


  • 比本地环境快。构建速度比 yarn/npm 快 20%,包安装速度可以快 5 倍


  • 支持在浏览器中调试 Node.js。与 Chrome DevTools 的无缝集成可实现本机后端调试,无需安装扩展。


  • 默认安全。所有代码执行都发生在浏览器的安全沙箱中,而不是在远程 VM 或本地二进制文件上。


同样,这些环境不需要在远程服务器上运行。而是每个环境都完全包含在你的 Web 浏览器中。没错:Node.js 运行时本身是第一次在浏览器内部本机运行。你可以在`StackBlitz.com`[41] 上自己尝试一下,下面是我截取的页面截图:


4f1f37596a912058ae3c96fe306107db.png


  • 推荐一个神器!可以在浏览器运行 Node.js


  • 在线 IDE WebContainers 体验地址[42]


第十七式:一起富强民主、文明、和谐、自由、平等?


别人写文章都妙笔生花,我上个网,我上个网,鼠标点过的地方都“富强、民主、文明、和谐、自由、平等”,我骄傲了吗?


复制以下代码到控制台执行,然后,开始点击你的页面吧~ 😎


(function () {
  var playWords = [
      '富强',
      '民主',
      '文明',
      '和谐',
      '自由',
      '平等',
      '公正',
      '法制',
      '爱国',
      '敬业',
      '诚信',
      '友善',
    ], // 点击展示的词库
    colors = ['#ff4545', '#3eff00'], // 颜色库
    wordIdx = Math.floor(Math.random() * playWords.length); // 随机取词下标
  document.body.addEventListener('click', function (e) {
    // 监听点击事件
    if (e.target.tagName == 'A') {
      // a标签
      return;
    }
    var x = e.pageX,
      y = e.pageY, // 获取点击位置
      span = document.createElement('span'); // 创建展示playWords的span
    span.textContent = playWords[wordIdx];
    wordIdx = (wordIdx + 1) % playWords.length;
    color = colors[Math.floor(Math.random() * colors.length)]; // 随机取色
    span.style.cssText = [
      'z-index: 9999; position: absolute; top: ',
      y - 20,
      'px; left: ',
      x,
      'px; font-weight: bold; color: ',
      color,
    ].join('');
    document.body.appendChild(span);
    renderWords(span);
  });
  function renderWords(el) {
    var i = 0,
      top = parseInt(el.style.top);
    var playTimer = setInterval(function () {
      if (i > 180) {
        clearInterval(playTimer);
        el.parentNode.removeChild(el);
      } else {
        i += 3;
        el.style.top = top - i + 'px';
        el.style.opacity = (180 - i) / 180;
      }
    }, 16.7);
  }
})();


写在最后


我是零一,如果我的文章对你有帮助,请点个 👍🏻 支持我一下

相关文章
|
7月前
|
人工智能 物联网 大数据
还记得当初自己为什么选择计算机?
还记得当初自己为什么选择计算机?
55 0
|
7月前
|
SQL 定位技术 Android开发
分享119个Android手机应用源代码总有一个是你想要的
分享119个Android手机应用源代码总有一个是你想要的
396 2
|
7月前
|
移动开发 JavaScript C#
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
131 0
|
7月前
|
移动开发 JavaScript HTML5
分享24个网页游戏源代码,总有一个是你想要的
分享24个网页游戏源代码,总有一个是你想要的
194 0
|
项目管理 数据安全/隐私保护
3款百里挑一的国产软件,逆天好用,装了就舍不得卸载
3款百里挑一的国产软件,逆天好用,装了就舍不得卸载
|
数据安全/隐私保护
小白也能重装系统?写给小白的一封信--重装纯净版Win10系统
小白也能重装系统?写给小白的一封信--重装纯净版Win10系统
294 0
|
JSON 文字识别 安全
我的MacBook装了啥玩意?
我的MacBook装了啥玩意?
142 0
我的MacBook装了啥玩意?
|
Web App开发 缓存 监控
|
移动开发 JavaScript 物联网
不装了、摊牌了,我们要搞事情
不装了、摊牌了,我们要搞事情
不装了、摊牌了,我们要搞事情
|
Web App开发 移动开发 前端开发