一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Frontend

CSS translate3d(x,y,z)

translate3d方法用来规定指定元素在三维空间中的位移。 用法比较简单,本文将通过一段代码实例动态演示translate3d的效果。 与二维空间位移相比多Z轴的位移,具体参阅CSS3 translate(x,y)一章节。 transform变换更多内容参阅CSS3 2D/3D转换一章节。 语法结构:

参数解析: (1).x:表示在x轴方向的位移。 (2).y:表示在y轴方向的位移。 (3).z:表示在z轴方向的位移。 代码实例如下:

上面的代码结合JavaScript演示了translate3d方法的功能。 特别说明:如果不使用perspective属性,将看不到z轴演示效果,因为3D场景就不会有景深的Z轴。 perspective属性参阅CSS3 perspective一章节。 translate3d方法也可以拆分单独写:

  from:http://www.softwhy.com/article-8720-1.html

龙生   04 Jan 2020
View Details

Vue HTML5 History 模式

vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。 如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。

  当你使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id,也好看! 不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。 所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。 #后端配置例子 #Apache

  除了 mod_rewrite,你也可以使用 FallbackResource。 #nginx

  #原生 Node.js

  #基于 Node.js 的 Express 对于 Node.js/Express,请考虑使用 connect-history-api-fallback 中间件。 #Internet Information Services (IIS) 安装 IIS UrlRewrite 在你的网站根目录中创建一个 web.config 文件,内容如下:

  #Caddy

  #Firebase 主机 在你的 firebase.json 中加入:

  #警告 给个警告,因为这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。

  或者,如果你使用 Node.js 服务器,你可以用服务端路由匹配到来的 URL,并在没有匹配到路由的时候返回 404,以实现回退。更多详情请查阅 Vue 服务端渲染文档。   from:https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB%AF%E9%85%8D%E7%BD%AE%E4%BE%8B%E5%AD%90

龙生   03 Jan 2020
View Details

vue-输入框change事件并获取值

1.html

  2.js

  from:https://www.cnblogs.com/zhizou/p/10648513.html

龙生   19 Dec 2019
View Details

vue中v-show和v-if的异同

一、官方解释: v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。 v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。 相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。 一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。 二、个人理解: 相同点:v-show和v-if都能控制元素的显示和隐藏。 不同点: 实现本质方法不同 v-show本质就是通过设置css中的display设置为none,控制隐藏 v-if是动态的向DOM树内添加或者删除DOM元素 编译的区别 v-show其实就是在控制css v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件 编译的条件 v-show都会编译,初始值为false,只是将display设为none,但它也编译了 v-if初始值为false,就不会编译了 性能 v-show只编译一次,后面其实就是控制css,而v-if不停的销毁和创建,故v-show性能更好一点。 注意点:因为v-show实际是操作display:" "或者none,当css本身有display:none时,v-show无法让显示 总结:如果要频繁切换某节点时,使用v-show(无论true或者false初始都会进行渲染,此后通过css来控制显示隐藏,因此切换开销比较小,初始开销较大),如果不需要频繁切换某节点时,使用v-if(因为懒加载,初始为false时,不会渲染,但是因为它是通过添加和删除dom元素来控制显示和隐藏的,因此初始渲染开销较小,切换开销比较大) from:https://www.cnblogs.com/liutianzeng/p/10978890.html

龙生   13 Dec 2019
View Details

Vue.js学习笔记之修饰符详解

本篇将简单介绍常用的修饰符。 在上一篇中,介绍了 v-model 和 v-on 简单用法。除了常规用法,这些指令也支持特殊方式绑定方法,以修饰符的方式实现。通常都是在指令后面用小数点“.”连接修饰符名称。 一、v-model的修饰符 v-model 是用于在表单表单元素上创建双向数据绑定的指令。在 <input> 和 <textarea> 上,默认通过监听元素的 input 事件来更新绑定的属性值。 为了能明显的看到绑定属性值的变化,需要在Chrome浏览器中安装Vue Devtools扩展程序。当查看Vue开发的页面时,按F12就可以在开发者工具里看到Vue页签。这里需要注意,只有在引用Vue的开发版本文件,即vue.js文件时,Vue Devtools工具才能正常使用。 .lazy 首先在 vm 对象中增加需要绑定的属性 1 2 3 4 5 6 var vm = new Vue({   el: "#app",   data: {     input_lazy: ""   } }); 在页面中的 input 的元素上添加指令 1 2 3 4 <div class="row">   <h2>v-model.lazy</h2>   <input type="text" v-model.lazy="input_lazy" /> </div> 打开页面,开启Vue Devtools,在文本框中输入字符,查看属性值变化 当在文本框输入内容,并且光标焦点没有离开文本框时,属性值没有实时发生变化 而当焦点离开文本框时,属性值发生了变化并与文本框内容保持一致。从这个例子可以看出 .lazy 修饰符延迟了同步更新属性值的时机。即将原本绑定在 input 事件的同步逻辑转变为绑定在 change 事件上。 .number 该修饰符用来将输入内容自动转换成数值。 在 vm 对象里增加一个属性,默认为空字符串 1 2 3 4 5 6 var vm = new Vue({   el: "#app",   data: {     input_number: ""   } }); 在页面的 input 元素上添加指令 1 2 3 4 5 <div class="row">   <h2>v-model.number</h2>   <input type="text" v-model.number="input_number" />   <hr /> […]

龙生   12 Dec 2019
View Details

前端JavaScript规范

JavaScript规范 目录 类型 对象 数组 字符串 函数 属性 变量 条件表达式和等号 块 注释 空白 逗号 分号 类型转换 命名约定 存取器 构造器 事件 模块 jQuery ES5 兼容性 HTML、CSS、JavaScript分离 使用jsHint 前端工具 类型 原始值: 相当于传值(JavaScript对象都提供了字面量),使用字面量创建对象。 string number boolean null undefined

复杂类型: 相当于传引用 object array function

对象 使用字面值创建对象。

不要使用保留字 reserved words 作为键。

数组 使用字面值创建数组。

如果你不知道数组的长度,使用push。

当你需要拷贝数组时使用slice. jsPerf。

使用slice将类数组的对象转成数组。

字符串 对字符串使用单引号 "(因为大多时候我们的字符串。特别html会出现")。

超过80(也有规定140的,项目具体可制定)个字符的字符串应该使用字符串连接换行。 注: 如果过度使用,长字符串连接可能会对性能有影响。

编程时使用join而不是字符串连接来构建字符串。

函数 函数表达式:

绝对不要在一个非函数块里声明一个函数,把那个函数赋给一个变量。浏览器允许你这么做,但是它们解析不同。 注: ECMA-262定义把块定义为一组语句,函数声明不是一个语句。阅读ECMA-262对这个问题的说明。

绝对不要把参数命名为 arguments, 这将会逾越函数作用域内传过来的 arguments 对象。

属性 当使用变量和特殊非法变量名时,访问属性时可以使用中括号(. 优先)。

变量 总是使用 var 来声明变量,如果不这么做将导致产生全局变量,我们要避免污染全局命名空间。

使用一个 var 以及新行声明多个变量,缩进4个空格。

最后再声明未赋值的变量,当你想引用之前已赋值变量的时候很有用。

在作用域顶部声明变量,避免变量声明和赋值引起的相关问题。

[…]

龙生   12 Dec 2019
View Details

gulp基本操作

1、安装淘宝镜像 npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm -v 2、生成项目描述文件 package.json npm init cnpm init (可代替 npm init) (需要项目名称、版本号、描述、入口文件、运行命令、作者、证书 —- 一路按回车即可) 3、全局安装gulp cnpm i gulp@3 -g 全局安装gulp @3 代表选择了 3 的版本 i 即为 install -g 即为 --global gulp -v 4、当前目录内部安装 gulp 模块 cnpm i gulp@3 -D cnpm i gulp@3 -S (二者选择其一即可) -D 缩写 --save-dev 开发依赖 -S 缩写 --save 项目依赖 开发依赖: 开发过程中需要使用到的依赖的模块,项目上线时不需要的模块 — 代码格式校验的模块 项目依赖: 项目上线仍然需要使用的模块 —-- 如果不知道怎么选择,那你就写 -S 5、创建文件 gulpfile.js ,配置gulp

5.1 创建 index.html,使用gulp完成对于index.html的复制操作,复制到当前目录的dist目录内

命令行执行了 gulp copy-index 发现多了 dist目录 5.2 gulp/css/a.css + gulp/css/b.css 5.2.1 复制 gulp/css 至 […]

龙生   12 Dec 2019
View Details

webpack

一、什么是webpack? webpack是一个现代JavaScript应用程序的静态模块打包器,在webpack里一切文件皆模块,通过loader转换文件,通过plugin注入钩子,最后输出由多个文件组合成的文件,webpack专注构建模块化项目。 webpack可以看做是模块打包机:他做的事情是,分析项目,找到JavaScript模块以及其他的一些浏览器不能直接运行的拓展语言(scss, TypeScript等),并将其打包为合适的格式以供浏览器使用。 二、四个核心概念 entry:一个可执行文件或库的入口文件。 chunk:多个文件组成的一个代码块。例如把一个可执行文件和他所有依赖的模块组合为一个chunk,这体现了webpack的打包机制。 loader:文件转换器。例如把es6转换为es5,scss转换为css。 plugin:插件,用于扩展webpack的功能,在webpack构建生命周期的节点上加入扩展hook为webpack加入功能。 三、webpack构建流程 解析webpack配置参数,合并从shell传入和webpack.config.js文件里配置的参数,生产最后的配置结果。 注册所有配置的插件,好让插件监听webpack构建生命周期的事件节点,以做出对应的反应。 从配置的entry入口文件开始解析文件构建AST语法树,找出每个文件所依赖的文件,递归下去。 在解析文件递归的过程中根据局文件类型和loader配置找出合适的loader用来对文件进行转换。 递归完后得到每个文件的最终结果,根据entry配置生成代码块chunk。 输出所有chunk到文件系统。 四、webpack和grunt、gulp的不同 1. 概念区别: (1)gulp/grunt是一种能够优化前端的开发流程的工具。 (2)webpack是一种模块化的解决方案。 2. 工作方式的区别: (1)Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译、组合、压缩等任务的具体步骤。工具之后可以自动替你完成这些任务。 (2)Webpack的工作方式:把你的项目当做一个整体,通过给定的主文件(如:index.js),webpack将从这个文件开始找到你的项目的所有依赖文件,使用loader处理他们,最后打包为一个(或多个)浏览器可识别的JavaScript文件。 3. 基于类型的区别 (1)grunt和gulp是基于任务和流(task、stream)的。类似jQury,找到一个(或一类)文件,对其做一系列链式操作,更新流上的数据,整条链式操作构成了一个任务,多个任务就构成了整个web的构建流程。 (2)webpack是基于入口的。webpack会自动地递归解析入口所需要加载的所有资源文件,然后用不同的loader来处理不同的文件,用plugin来扩展webpack功能。 五、几种常见的loader file-loader:把文件数出到一个文件夹中,在代码中通过相对URL去引用输出的文件。 url-loader:和file-loader类似,但是能在文件很小的情况下以base64的方式把文件内容注入到代码中去。 source-map-loader:加载额外的source map文件,以方便断点调试。 image-loader:加载并且压缩图片文件。 babel-loader:把es6转换成es5。 css-loader:加载CSS,支持模块化、压缩、文件导入等特性。 style-loader:把CSS代码注入到JavaScript中,通过DOM操作去加载CSS。 eslint-loader:通过ESLint检查JavaScript代码。 六、webpack的优缺点 优点 专注处理模块化的项目,能做到开箱即用,一步到位。 可通过plugin扩展,完整好用又不是灵活。 使用场景不局限于web开发。 社区庞大活跃,经常引入紧跟时代发展的新特性,能为大多数场景找到已有的开源扩展。 良好的开发体验。 缺点 webpack的缺点是只能用于采用模块化开发的项目。 七、什么是模块的热更新? 模块热更新是webpack的一个功能,他可以使得代码修改过后不用刷新浏览器就可以更新,是高级版的自动刷新浏览器。 DevServer中通过hot属性可以控制模块的热替换。 1、通过配置文件

  2、通过命令行

  八、懒加载(按需加载路由) webpack中提供了require.ensure()来实现按需加载。以前引入路由是通过import这样的方式引入,改为const定义的方式进行引入。 不进行页面按需加载的引入方式:

  进行页面按需加载的引入方式:

  九、通过webpack处理长缓存 浏览器在用户访问页面的时候,为了加快加载速度,会对用户访问的静态资源进行存储,但每一次代码升级或是更新,都需要浏览器去下载新的代码,最方便和简单的更新方式就是引入新的文件名称。在webpack中可以在output中输出的文件指定chunkhash,并且分离经常更新的代码和框架代码。通过NameModulesPlugin或是HashedModuleldsPlugin使再次打包文件名不变。 作者:李丹linda 链接:https://www.jianshu.com/p/86a3c35079cc 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

龙生   11 Dec 2019
View Details

Jest

jest 是facebook推出的一款测试框架,集成了 Mocha,chai,jsdom,sinon等功能。 安装与配置

  运行命令 jest 后会自动运行项目下所有.test.js和.spec.js这种格式的文件。涉及到运用 ES 或 react 的,要与babel相结合,加上.babelrc文件即可。jest的配置默认只需要在package.json中配置即可,当然也可以用独立的配置文件。 我们这里直接将 jest 的运行范围限定在test文件夹下,而不是全部,所以在package.json中加入如下配置:

  注意到这里的匹配规则是正则表达式 基本用法 和之前介绍的 mocha 和 chai 的功能很像,甚至可以兼容部分 mocha 和 chai 的语法。可以这么写

  jest与eslint检测 如果看了上面的代码会发现我没有引用任何类似于

  的代码,而那个expect是没有定义的。 这段代码直接运行jest命令没有任何问题,但是eslint会检测出错,对于这种情况,我们可以再eslint配置文件.eslintrc中加入以下代码:

  jest的断言 jest有自己的断言玩法。除了前面的代码中已经写到的

  还有常用的

  更多断言玩法 jest的 mock 介绍了jest替代mocha和chai的部分,那么接下来就看看如何替代sinon。 下面是官网的示例:

  从上面可以看到这种玩法很类似于sinon的 sinon.spy()。当然也有类似于stub返回值的那种玩法,更多的请参考 jest mock的更多玩法 mock文件和css module的问题 如果js文件中引用了css或者本地其他文件,那么就可能测试失败。为了解决这个问题,同时也为了提高测试效率:

  而fileMock.js文件内容为:

  然后安装identity-obj-proxy即可:

  jest与别名 在webpack中经常会用到别名,而jest测试时,如果文件中引用了别名会出现找不到文件的问题。毕竟jest测试时没有经过webpack处理。对于以下玩法

  可以通过

  这个和之前 mock文件和css module的问题 一样,都是使用了moduleNameMapper这个属性 生成测试覆盖率报告 只需要在jest命令后加入 --coverage即可

  13人点赞 前端单元测试 作者:我向你奔 链接:https://www.jianshu.com/p/eaaf07c1b88f […]

龙生   11 Dec 2019
View Details

安装cnpm后运行报cnpm : 无法加载文件 C:\Users\yizon\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本

安装cnpm:

安装完成后报错:无法加载文件 C:\Users\yizon\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本 解决:管理员身份运行power shell,再输入:

输入A,回车   from:https://www.cnblogs.com/yifamily/p/11853259.html

龙生   11 Dec 2019
View Details
1 21 22 23 59