查看详情

解决新版本 Chrome 提示 DOMException: The play() request was interrupted

解决新版本 Chrome 提示 DOMException: The play() request was interrupted 解决新版本 Chrome 提示 DOMException: The play() request was interrupted 大概在一些新版本的浏览器中,我们是用 audio 或者 video 进行媒体资源播放的时候,可能会在控制台看到这个输出: Uncaught (in promise) DOMException: The play() request was interrupted by a call to pause(). Or Uncaught (in promise) DOMException: The play() request was interrupted by a new load request. 如何触发? < 详情 »

查看详情

IE vs Chrome vs Safari video 的预加载表现分析

我们知道在 video 的标签中支持 preload的属性, 它表示可以 用于定义视频对于媒体资源的预加载从而达到更好的播放体验。它可以设置下面属性值: auto 表示整个视频都会进行下载,即使用户并不打算播放它。 metadata 只请求视频信息的 metadata 数据,比如长度。 none 不停止视频资源预加载。 测试表现 Chrome *版本: 61 * 我们测试Chrome设置为 auto 的时候加载数据大约为 (3.6M / 20.1M) Preload Size auto 3.6M / 20.1M none 0 M / 20.1 M metadata 896 KB / 20.1 M Safari 版本: 11.0 Preload Size auto 20.1M 详情 »

查看详情

MacOS High Sierra Safari 11限制了 video 自动播放

前些天 Apple 正式向用户推送了他们的新一代 Mac OS MacOS High Sierra 。这次带来了新的 Safari 浏览器,然而一个不好的消息,是 safari 重新制定了新的限播策略。点击这里 了解上个版本的播放限制策略调整。 现在网页用包含 video 或者 audio 的标签,如果涉及了 autoplay 属性,浏览器现在不再进行自动播放,而用户需要在 url 的状态栏进行设置(右击就好): 里面会有三个选项: 允许自动播放 永不自动播放 停止播放含有声音的媒体 官方也给了建议,你可以通过代码来监听是否自动播放: var promise = document.querySelector('video').play(); if (promise !== undefined) { promise.catch(error => { // Auto-play was prevented // Show a UI element 详情 »

查看详情

微日记-20170917

天气晴。 距离上一次随笔,已经是10天左右了。从杭州回来了,就开始加班加点进行 IE Bug 上的调整。随后是播放策略和对外输出的接口能力支撑。感觉这次挑战还不小。 去杭州的时候,和继稳聊了很多。关于技术,工作,未来,定居,情感。他说: 大概每个阶段都开始有自己的目标,觉得落实了工作,落实了婚姻,现在就得想着房子,大概未来几年都是这个目标吧~ 自己想了想何尝不是,认识所处阶段,三年一个阶梯,读完了初中,来到高中,从大学毕业三年,希望翻过另外一个阶梯。 然后 做的 avatar 其实想说下具体的每次出图会经历的流程: google up moive -> dribble search pink dress -> open PS -> visit behance -> paste images -& 详情 »

记一次 JS 代码压缩后产生的 Bug

最近遇到了个平时很少遇到的 Bug,理论上代码压缩混淆后大多数都不会存在问题(之前确实没有遇到),但是最近却不小心给遇到了。 大概在测试的时候,没有混淆前,代码是可以正确执行的,但是混淆后,代码就出现部分 JS 未顺利执行的情况。然后通过代码一步步调试,发现,在进行混淆的时候,会把一些变量命名转化成类似字幕 a, b, c等这样。然后这次在组件注册的时候,比较偷懒,用了 Function.name 来代表注册组件的名称,而不是独立命名。 自己在 ES6 偷懒这样写了: import PlayComponent from './play-component'; // ... ui.register(PlayComponent); // register 的实现 ui.register = function(func) { const name = func.name; } 这样就导致在压缩的时候的 传入的参数会变成 t 这样就会知道命名失效,始终都是 t 。 所以在实现的时候尽量少用 Function.name 详情 »

《微日记-20170906》

天气晴。 好久没写随笔了。和同事调侃这周 三天打鱼,两天晒网。可是这周确实只上了两天班。 大概又想起了《中国合伙人》里的那句台词: 明天去杭州,9月份又一次。此地有雨,还需带伞。 详情 »

查看详情

取消 vue-core-image-upload 的默认上传

vue-core-image-upload 是一款方便的 vue.js 图片上传裁剪插件,你可以用它进行图片的上传,裁剪和压缩。 vue-core-image-upload 提供 is-xhr 这个属性来 取消默认的上传方式。然后通过 imagechanged 来获取文件内容。 参考示例 下面我们简单实现一套代码,实现自定义图片处理,我们不用自动上传,我们上传一张 png 然后将图片进行压缩和重命名上传到我们的服务器。 安装依赖 默认的一些 vue ,webpack 这些安装就省略了,我们直接开始先安装插件 : npm i vue-core-image-upload --save 然后安装 j-i-c 用于图片的压缩。 npm install j-i-c --save 安装完成后,我们还需要做点小事情,我们需要将 jic 改成 common.js 的模式。这个时候我们更改下 src/JIC.js 。我们需要在文件末尾将模块导出; // ... above contens module.exports 详情 »

判断一个元素是否是 SVG 元素

我们经常通过事件代理会取到一些元素,大概我们第一个想到的 tagName 来判断,但是这样的确需要写过 map 来判断。我们可以有个快捷的方法: const el = document.querySelector('.svg-inner'); el.ownerSVGElement // true 则表示式 svg 元素 如果 false 则不是 参考: https://stackoverflow.com/questions/20748836/how-do-i-tell-if-a-dom-element-is-html-or-svg#= 详情 »

查看详情

前端实用的在线工具推荐系列(一)

caniuse caniuse 是一个在线查看浏览器的对某些特性的支持情况,如果你需要查看某些语法比如新的 ES6 语法 或者 H5 中一些新的 API (web worker, mediaSource等。作者还提供了一些开放的 API 让你将它嵌入到你的页面中。自己之前写过 《在自己的网站或者博客嵌入浏览器支持情况》 有兴趣的可以阅读下。 在线地址 icomoon.io icomoon.io 是一款在线生成 iconfont 或者 SVG sprite 的网站。你可以选择免费或者付费的字体图标(海量),然后会自动生成字体或者 SVG 代码,然后你可以打包下载,非常方便使用,比如自己的网站就采用了它生成的 SVG 图标。 在线地址 uigradients uigradients 是一款在线的编辑或者选择渐变的网站,你可以自定义渐变的色彩也可以从比较流行的渐变中选择一种,你可以获取到它的颜色值以及 css 代码片段。 base64-image base64-image 这个不必多说了,图片进行 Base64 压缩的网站,支持多种格式,包括 详情 »

查看详情

What learned from an open github project

Last year, I have tried to finish an interesting react-native project on my GitHub. React-native-percentage-circle is a component which supports you to define your percent data and draw a circle. And also you can use it as a progress bar and show some data in the circle. It does make a difference to my life. Opearation 详情 »