移动端滚动方案:better-scroll
BetterScroll 是什么 BetterScroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件。它的核心是借鉴的 iscroll (opens new window)的实现,它的 API 设计基本兼容 iscroll,在 iscroll 的基础上又扩展了一些 feature 以及做了一些性能优化。 BetterScroll 是使用纯 JavaScript 实现的,这意味着它是无依赖的。 官方文档:BetterScroll 官方Demo:示例 为什么不能滚动:滚动原理 绿色部分为 wrapper,也就是父容器,它会有固定的高度。黄色部分为 content,它是父容器的第一个子元素,它的高度会随着内容的大小而撑高。那么,当 content 的高度不超过父容器的高度,是不能滚动的,而它一旦超过了父容器的高度,我们就可以滚动内容区了,这就是 BetterScroll 的滚动原理。 在项目中使用 基本HTML结构 <div class="container"> <header class="header-wrapper"> <div ...
JavaScript中的设计模式
设计原则 单一职权原则(SRP) 一个对象或方法只做一件事情。如果一个方法承担了过多的职责,那么在需求的变迁过程中,需要改写这个方法的可能性就越大。 应该把对象或方法划分成较小的粒度 最小知识原则(LKP) 一个软件实体应当 尽可能少地与其他实体发生相互作用 应当尽量减少对象之间的交互。如果两个对象之间不必彼此直接通信,那么这两个对象就不要发生直接的 相互联系,可以转交给第三方进行处理 开放-封闭原则(OCP) 软件实体(类、模块、函数)等应该是可以扩展的,但是不可修改。 当需要改变一个程序的功能或者给这个程序增加新功能的时候,可以使用增加代码的方式,尽量避免改动程序的源代码,防止影响原系统的稳定 什么是设计模式 假设有一个空房间,我们要日复一日地往里面放一些东西。最简单的办法当然是把这些东西直接扔进去,但是时间久了,就会发现很难从这个房子里找到自己想要的东西,要调整某几样东 西的位置也不容易。所以在房间里做一些柜子也许是个更好的选择,虽然柜子会增加我们的成本,但它可以在维护阶段为我们带来好处。使用 这些柜子存放东西的规则,或许就是一种模式 设计模式 ...
一文搞懂弹性盒子flex布局
什么是flex布局 flex布局又称为弹性盒子模型,它有自己的一套属性,效率高,学习成本低,兼容性强! 弹性盒子模型实现 HTML 页面布局是与方向无关的。不类似于块级布局侧重垂直方向,内联布局侧重水平方向。 弹性盒子模型主要适用于 HTML 页面的组件以及小规模的布局,而并不适用于大规模的布局,否则会影响 HTML 页面性能。 名词定义 伸缩容器(flex container):包裹伸缩项目的父元素。 伸缩项目(flex item):伸缩容器的每个子元素。 轴(axis):每个弹性盒子模型拥有两个轴。 主轴(main axis):伸缩项目沿其一次排列的轴被称为主轴。 侧轴(cross axis):垂直于主轴的轴被称为侧轴。 方向(direction):伸缩容器的主轴由主轴起点和主轴终点,侧轴由侧轴起点和侧轴终点描述伸缩项目排列的方向。 尺寸(dimension):根据伸缩容器的主轴和侧轴,伸缩项目的宽度和高度。 对应主轴的称为主轴尺寸。 对应侧轴的称为侧轴尺寸。 定义弹性盒子 弹性盒子是css3新增的属性,因此弹性盒子模型及其属性存在浏览器兼容问题。具体可查看C ...
HTML5中audio与video
音频 HTML5中提供的音频API标签为<audio></audio>,使用示例如: <audio src="野狼disco.m4a" controls></audio> 兼容写法 <audio controls> <source src="resource/audio/OUTPUT.mp3" type='audio/mpeg'> <source src="resource/audio/OUTPUT.aac" type='audio/aac; codecs="aac"'> <source src="resource/audio/OUTPUT.ogg" type='audio/ogg; codecs="vorbis"'> 您的浏览器不支持,<a href="resource/audio/OUTPUT.mp3">请下载</a> </audio> 当浏览器不支持或者当前音乐地址失效时会分别访问source提供的路径,如果全部失效则提示最下边的文本。 音乐属性 属性名 说 ...
三、移动端轮播图的实现
布局 <div id="app"> <div id="swiper-container"> <!-- 幻灯片的结构 --> <div class="swiper-wrapper"> <div class="swiper-slide"><img src="./img/1.jpg"></div> <div class="swiper-slide"><img src="./img/2.jpg"></div> <div class="swiper-slide"><img src="./img/3.jpg"></div> <div class="swiper-slide"><img src="./img/4.jpg"></div> <div class="swiper-slide"><img src="./img/5.jpg"></div> </div> <!-- 导航点 ...
四、Webpack其他补充
多页面打包 使用glob插件并通过 yarn add glob html-webpack-plugin -D 配置 /** * @description: * @author: 小康 * @url: https://xiaokang.me * @Date: 2021-01-02 17:18:46 * @LastEditTime: 2021-01-02 17:18:46 * @LastEditors: 小康 */ const glob = require('glob') const path = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') const setMPA = () => { const entry = {} const htmlWebpackPlugins = [] const entryFiles = glob.sync(path.join(__dirname, './src/*/index.js')) Obje ...
三、Webpack优化配置
性能优化 性能优化包含开发环境优化和生产环境优化。 开发环境 优化打包构建速度 优化代码调试 生产环境 优化打包构建速度 优化代码运行的性能 开发环境 HMR 即热更新:一个模块发生变化,只会重新打包这一个模块。 在devServer中开启 { devServer: { contentBase: resolve(__dirname, 'build'), compress: true, port: 3000, open: true, // 开启HMR功能 // 当修改了webpack配置,新配置要想生效,必须重新webpack服务 hot: true } } 样式文件 样式文件可以使用热更新,因为style-loader内部实现了 js文件 默认不使用HMR功能,需要手动修改支持HMR。且只能处理非入口文件。 if (module.hot) { // 一旦 module. ...
二、Webpack进阶玩法
说明 由于webpack5正式版刚发布不久,仍有插件不支持webpack5,因此此文以webpack4为例进行撰写。 webpack@4.44.1 webpack-cli@3.3.12 提取CSS成单独文件 安装插件 yarn add mini-css-extract-plugin -D 配置文件:将MiniCssExtractPlugin.loader替换曾经的style-loader /** * @description: * @author: 小康 * @url: https://xiaokang.me * @Date: 2020-12-31 19:32:48 * @LastEditTime: 2020-12-31 19:32:48 * @LastEditors: 小康 */ const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') const MiniCssExtractPlugin = require('m ...
一、Webpack简单使用
webpack五个核心概念 Entry 入口(Entry)指示webpack 以哪个文件为入口起点开始打包,分析构建内部依赖图。 output 输出(Output)指示webpack 打包后的资源bundles 输出到哪里去,以及如何命名。 loader Loader 让webpack 能够去处理那些非JavaScript 文件(webpack 自身只理解JavaScript) plugins 插件(Plugins)可以用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量等。 mode 模式(Mode)指示webpack 使用相应模式的配置。 选项 描述 特点 development 会将DefinePlugin中process.env.NODE_ENV的值设置为development。启用NamedChunksPlugin和NamedModulesPlugin。 能让代码本地调试运行的环境 production 会将DefinePlugin中process.env.NODE_ENV的值设置为production。 ...
二、移动端的适配问题
尺寸适配 只需要将viewport width等于设计稿的宽度即可。 <meta name='viewport' content='width=750,user-scalable=no'> less与rem适配 less文件 @font-size: 设计稿的宽度 / 10rem; #box{ width: 200/@font-size; height: 100/@font-size; } 使用js做根元素的调整 document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px'; window.onresize = function () { document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px'; }













