10个日常开发必备的 JavaScript 代码片段

125 阅读4分钟

在 Web 开发领域,开发效率是关键。为什么每次开始新项目时都要重新发明轮子?今天,本文汇总整理了一些方便日常开发使用的 JavaScript 代码片段,超越了 Lodash 和 day.js 等常见代码片段,提升你的开发效率,减少工作时长。

在 Web 开发领域,开发效率是关键。为什么每次开始新项目时都要重新发明轮子?今天,本文汇总整理了一些方便日常开发使用的 JavaScript 代码片段,超越了 Lodash 和 day.js 等常见代码片段,提升你的开发效率,减少工作时长。

让我们开始吧!

1. 检测元素外的点击

厌倦了复杂的检查以查看点击是否落在目标元素之外?使用 contains 方法简化事情,以更简洁的方式隐藏模式或折叠菜单:

复制

document.addEventListener('click', function (evt) {
     // isClickedOutside is true if the clicked element is outside 'ele'
     const isClickedOutside = !ele.contains(evt.target);
   });1.2.3.4.

2. 快速打开官方网站

需要查阅第三方库的文档或存储库?这些命令将快速带您到达那里:

复制

# Open the homepage
   npm home PACKAGE_NAME
   npm home react


# Open the repository
   npm repo PACKAGE_NAME
   npm repo react1.2.3.4.5.6.7.8.

3. 一次性事件监听器

对于只想处理一次的事件,可以利用 once 选项,而不是手动删除监听器:

复制

const handler = function (e) {};
   ele.addEventListener('event-name', handler, { once: true });1.2.

4. 将秒数格式化为 HH:mm:ss

显示音频或视频的时长时,以用户友好的 HH:mm:ss 格式显示秒数:

复制

const formatSeconds = (s) =>
     [parseInt(s / 60 / 60), parseInt((s / 60) % 60), parseInt(s % 60)]
       .join(':')
       .replace(/\b(\d)\b/g, '0$1')1.2.3.4.

对于相对时间显示,如“几秒前”或“5 分钟前”,请探索 timeago.js 库!

5. 将 URL 参数转换为对象

虽然 query-string 是一个流行的库,但可以直接使用 URLSearchParams API 实现相同的功能:

复制

const getUrlParams = (query) =>
     Array.from(new URLSearchParams(query)).reduce(
       (p, [k, v]) =>
         Object.assign({}, p, { [k]: p[k] ? (Array.isArray(p[k]) ? p[k] : [p[k]]).concat(v) : v }),
       {}
     )


// Get query parameters
   getUrlParams(location.query)
   // { a: ['1', '4'], b: '2', c: '3' }
   getUrlParams('?a=1&b=2&c=3&a=4') 
   // Get hash parameters
   getUrlParams(location.hash.split('?')[1])1.2.3.4.5.6.7.8.9.10.11.12.13.14.

6. 安全打开新标签页

打开新标签页看似微不足道,但需要注意安全。在外部链接时,使用 noopener noreferrer 来防止恶意网站通过 window.opener.location 重定向您的网站。这同样适用于 window.open。

复制

<a target="_blank" rel="noopener noreferrer">...</a>


// window.open defaults rel to 'opener', so set it explicitly
   window.open('https://google.com', 'google', 'noopener,noreferrer')1.2.3.4.5.

警告:以下代码片段存在安全漏洞!

复制

<a target="_blank" rel="opener">
...</a>
window.opener.location = 'http://fake.website.here';1.2.3.

7. 预览上传的图像

使用 FileReader API 直接在浏览器中显示用户上传图像的预览:

复制

function readImage() {
     const fileReader = new FileReader()
     const file = document.getElementById('uploaded-file').files[0]


    if (file) {
       fileReader.readAsDataURL(file)
     }


     fileReader.addEventListener(
       'load',
       () => {
         const result = fileReader.result
         const resultContainer = document.getElementById('result')
         const img = document.createElement('img')
         img.src = result
         resultContainer.append(img)
       },
       { once: true }
     )
   }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.

8. 下载文件

使用 标签的下载属性触发下载。请记住,这对于同源文件可靠地起作用,并且在 IE 和移动设备上可能会受到限制:

复制

<a href="/path/to/file" download>Download</a>1.

或者,使用 JavaScript 生成临时的 标签:

复制

function download(url) {
     const link = document.createElement('a')
     link.download = 'file name'
     link.href = 'url'


     document.body.appendChild(link)
     link.click()
     document.body.removeChild(link)
}1.2.3.4.5.6.7.8.9.10.

对于静态文件,在服务器上设置适当的 Content-Disposition 标头也可以触发下载:

复制

Content-Disposition: attachment; filename="filename.jpg"1.

除了文件下载之外,还可以使用 Blob 对象和 createObjectURL 方法创建和下载文本或 JSON 文件:

复制

const data = JSON.stringify({ 'message': 'Hello Word' });


const blob = new Blob([data], { type: 'application/json' });
 // Create a URL for the blob
 const url = window.URL.createObjectURL(blob);
 // Download the URL using the 'download' function above
 ...


 // Release the URL object
 window.URL.revokeObjectURL(url);1.2.3.4.5.6.7.8.9.10.11.12.

9. 记忆函数结果

使用记忆法缓存计算量大的函数的结果:

复制

const memoize = (fn) =>
     (
       (cache = Object.create(null)) =>
       (arg) =>
         cache[arg] || (cache[arg] = fn(arg))
     )()1.2.3.4.5.6.

10. 多行省略号...

使用 CSS 用省略号截断文本内容,无论是单行还是多行:

复制

.truncate {
     overflow: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
   }


.truncate-multi {
     display: -webkit-box;
     -webkit-box-orient: vertical;
     -webkit-line-clamp: 2; 
     overflow: hidden;
   }

相关推荐

前端的世界总是在不断变化,作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。低代码也是一个值得我们深入探索的领域,让我们拭目以待,它将给前端世界带来怎样的变革。

介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

JNPF 可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。

希望这篇文章对你有所帮助~