JD_M案例知识点(移动端)
JD_M案例知识点
基础布局+顶部通栏+顶部轮播图+导航栏
知识点
- base.css
- ::before,::after 伪元素
统一设置文字 sans-serif 移动端 的默认字体
font-family: '微软雅黑',sans-serif;设置背景图片的大小压缩了一倍 目的是为了防止用户看到像素颗粒,如果要一行写完background,size要加“/”
轮播图——左右两张的无限轮播图
- 最左边加上最后一张
- 最右边加上第一张图
- 默认给用户看的是:如果用索引来说,是索引为1的那一张(最前面一张的索引为0)
- 图片分辨率问题
- ios中,会准备多张图片
- 早期的web开发中也会准备多张图片
- 现在流行的是准备一张大图然后进行压缩
- 为了保证零头不影响布局
- 设置:width: 33.33333%;
- 而不是:width: 33%;
- 移动端屏幕适配布局方式:
- 宽度百分比,定高
- viewport
- 抽取通用样式的目的:
- 方便使用
- 将常用的样式定义为通用的资源,使用时直接添加class名字就可以
技术点:less
优点
- 为CSS赋予了动态的语言特性
- 变量、继承、运算、函数等,方便CSS的编写与维护
sublime安装less插件
- 下载压缩包
- sublime 菜单的 倒数第二项
- 第一个选项
- 把弹出的文件夹的路径,复制
- 双击压缩包
- 解压到
- 将复制的路径 拷贝进去
- 确定解压
- 开关sublime 即可
less只是一个纯文本
- 装插件与否 仅仅影响的是 高亮效果
- 不影响代码的编写
- webstorm 我需要研究一下再告诉大家
less使用
- 创建后缀是.less的文件
- 运行考拉
- 讲less的文件夹拖入考拉
- 只要保存.less文件 ctrl+s 考拉 会自动帮助我们进行 编译
- 编译的作用是: 讲less 转化为 .css文件
- 讲less中的语法 根据一定的规则 替换为 对应的css代码
考拉编译注意点
- 如果弹出红色框框 意味着 写错了代码
- 如果放.less文件的 文件夹 叫做 less
- 在编译的时候 会在跟less文件夹同级的目录下 创建一个 叫css的文件 编译好的代码就在那里面
- 如果文件夹名不叫 less 而是 其他的 那么 会在统计目录下
less的作用
- 变量的作用
- 实现 替换变量值,所有使用变量的地方 都会被替换
- 比如 页面大量使用jd红,要换位 淘宝红 只需要替换变量值即可
- 京东m使用less来写
- jd红 定义变量
- 嵌套多的结构 使用 less的 嵌套写法
- 混合的 写法 可以 先别急着 用上去:width:100%;
- 变量的作用
less语法
- 注释
- //注释:less支持跟js一样是注释,并且这样的注释
- /我是一行注释,编译时,该注释会被保留/
- 变量定义
//格式:变量名:变量值
@jdRed: rgb(201,21,35);
//定义宽度
@minWidth:100px;
//定义图片尺寸
@imgSize:100px 100px;
- 类似于函数用法
- 括号中 参数名: 参数的默认值
- 如果使用 该class 进行混合时,如果不传递参数,会使用默认值
.red{
background-color: red;
border:1px solid red;
color:red;
}
.oneColor(@color:#0094ff){
background-color: @color;
border:1px solid @color;
color:@color;
}
body{
.red();
}
ul{
.oneColor(yellow);
}
div{
.oneColor();
}
- 嵌套
//css
.box {
background: #fff;
}
.box ul {
color: red;
}
//less
.box {
background: #fff;
ul {
color: red;
}
}
js基础
1. 滚动后顶部通栏透明度
- scrollTop获取滚动后,导航栏距离顶部的距离,最新版本浏览器(chrome和火狐,其他没有测试)不能使用document.body.scrollTop获取,只能使用document.documentElement.scrollTop获取。
2. 倒计时
- 先获取一些必要元素
- 每个一秒执行一次代码(定时器)
- 易错点1:dom元素修改文本,需要用.innerHTML
- 易错点2:时分秒的十位数记得取整,否则显示的是小数
3. 轮播图
自动轮播图
- 定义index记录索引值
- 获取一些必须要知道的变量
- 单个元素宽度
- 轮播图的ul(很长的ul:1000%)
- 索引的ul里面的li(li数组)
- 定时器
- index++
- 修改ul位置
- 使用过渡来实现动画(缓动)效果
- 过渡结束事件
- transitionend
- 加前缀:webkitTransitionEnd
- 需要使用addEventListener的方式添加
- 默认的方法名为transitionend
- 由于浏览器兼容性问题,可能需要添加前缀
- webkitTransitionEnd
- mozTransitionEnd
- msTransitionEnd
- oTransitionEnd
移动端特有事件
- touch
- touchstart:当手指触摸屏幕时触发,事件参数中有触摸点的值
- touchmove:当手指在屏幕上滑动时连续的触发,事件参数中有触摸点的值
- touchend:当手指从屏幕上移开时触发,事件参数中没有触摸点的值
- 特点
- 不能通过doc.ontouchstart的方式去绑定
- 只能addEventListener的方式进行绑定
- 只在移动设备上支持
- 常见封装
- 左滑,右滑
- 长按
- 捏合
- 这些事件都是基于touch三个事件的封装
4. 注意
- 实际开发中,页面的数据的获取
- 如果是一个动态网站(基本上现在是所有网站都是动态的),页面中的内容是动态生成的
- 比如:img的src属性,a标签的本质,页面布局效果等
- 不刷新页面获取新数据:ajax技术
- 发送请求即可
- 在什么情况下发送请求:
1.点击加载更多:点击发送ajax
2. 滚动加载更多:滚动发送ajax
3. 失去焦点验证用户名:失去焦点事件发送ajax
分类搜索页面(list.html)
1. 左侧滑动
- 向上移动,是y的负方向
- 移动的最小值:父盒子的长度-ul的长度
- 移动的最大值:默认是0
2. 让代码的通用性更强
关于DOM元素的值:通过先获取DOM元素,然后根据DOM元素获取:
- 高度
- 宽度
- 子元素个数
- 默认的样式等
不要在代码中出现magicNumber
- magicNumber:代码中写死具体的数值style.transition='all .3s';
- 或者是:distance += 10;
- 对于代码量足够大的项目,如果大量使用magicNumber,那么维护起来是致命的。
- 实际开发中,在代码最开始的时候定义一大堆的变量
- 成熟的代码一般都是先定义变量
移动端click事件的触发,会延迟200ms
- 为了提升用户体验,能顾实时触发,一般会自己封装一个叫tap的方法,手指触发
- touch只有3个,左右滑动,滚动都是封装的
- 如何算tap事件:手指点上去不移动,快速松开。用以下三个事件封装:
- touchstart
- touchmove:手指不动是不会触发的,只要能执行这个方法,就是失效的,因此不移动的逻辑,可以在这里实现
- touchend:记录开始时间的差值
console.log();是十分消耗性能的,所以该方法只会出现在测试阶段,上线时会去掉。
使用老版本的谷歌浏览器,刚切换到移动端视口时还能够看到click的延迟效果,如果刷新之后就看不到了。
手机测试:
- 比较low的方法,(公司不用)
- 直接拷贝到手机上,通过手机的资源管理器打开html文件,指定使用的浏览器即可
- 手机登陆qq
- 电脑登陆qq:发送到我的设备,手机qq打开网站,选择使用的浏览器,注意iphone只支持使用qq浏览器才能打开
- 公司里用的方法:会有一个专门的测试服务器,写好了以后上传即可
- wamp:
- 配置完成以后,将自己的移动站点丢到这里
- 保证手机跟电脑在统一各局域网中(连着同一个wifi):手机打开浏览器输入电脑的IP地址即可访问
- 比较low的方法,(公司不用)
索引值的获取:
- 可以在for循环中获取
- 为每一个li保存一个索引属性:
<body data-index='1'>
,点击li的时候获取该属性的值即可:dom.dataSet['index']
;
解决左侧点击到li标签的问题:
为了让a标签的点击范围增大,避免出现用户点击不到a标签的情况:将a标签的宽高设置为100%
display: block;
width: 100%;
height: 100%;
响应式+bootstrap
基本概念
- 针对所有设备
- 目的是开发一次即可
- 会根据设备的屏幕尺寸改变而改变布局
技术的选择
- 老项目
- 推出的时候手机还没有这么流行
- 重新开发一个移动端的站点
- 新项目
- 直接做响应式站点
- 性能考虑
- 在时间、金钱允许的情况下,各开发一个版本是最好的
- 响应式网站的缺点:代码较多、维护较为复杂
- 工作中是否选用?看leader:选择项目使用的技术
- 开发时间:一般情况是,快于1+1
其他
- 如果直接使用js也是能够实现效果的,只不过可能代码较多
- 直到CSS3中推出了媒体查询:就是可以通过css去获取一些设备的信息
多媒体查询
-CSS2多媒体查询
@media 规则在CSS2中有介绍,针对不同的媒体类型可以定制不同的样式规则。
CSS3多媒体查询
- CSS2的多媒体查询继承了CSS2多媒体类型的所以思想:取代了查找设备的类型,CSS3根据设置自适应显示。
- 媒体查询可用于检测很多事情,例如:
- viewport(视窗)的宽度与高度
- 设备的宽度与高度
- 朝向(智能手机横屏,竖屏)。
- 分辨率
- 目前很多针对iOS、Android手机,平板等设备都会用到多媒体查询。
- 浏览器支持:chrome21.0,IE9.0,firefox3.5,safari4.0,opare
- 媒体查询的基础语法:
- 设备的屏幕尺寸大于等于480的时候,使用括号内的样式
- 也遵循层叠样式表的
- 为了避免样式覆盖
- 可以修改先后顺序
- 实例:
@media screen and (min-width: 480px) {
#leftsidebar {
width: 200px;
float: left;
}
#main {
margin-left: 216px;
}
}
bootstrap字体图标
- 第一步:glyphicon
- 设置图标的位置
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
- 第二步:glyphicon-barcode
- 设置图标内容
.glyphicon-barcode:before {
content: "\e040";
}
前端框架
有一对预定义的代码
- html,css
- 也有一部分封装的js
可以直接使用
- 直接使用定义好的class
- 直接使用它定义好的html层次结构(组件)
也可以改参数使用
bootstrap
- 2.x:早期的,目前很难看到
- 3.x:目前较为流行的版本,其中使用较多的是3.3.5
- 4.x:在测试中,更为侧重于移动端
全局CSS样式
设置全局 CSS 样式;基本的 HTML 元素均可以通过 class 设置样式并得到增强效果;还有先进的栅格系统。
Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型。在你项目中的每个页面都要参照下面的格式进行设置。
Bootstrap 是移动设备优先的。针对移动设备的样式融合进了框架的每个角落,而不是增加一个额外的文件。
为了确保适当的绘制和触屏缩放,需要在 之中添加 viewport 元数据标签。
<meta name="viewport" content="width=device-width, initial-scale=1">
在移动设备浏览器上,通过为视口(viewport)设置 meta 属性为 user-scalable=no 可以禁用其缩放(zooming)功能。这样禁用缩放功能后,用户只能滚动屏幕,就能让你的网站看上去更像原生应用的感觉。注意,这种方式我们并不推荐所有网站使用,还是要看你自己的情况而定!
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
预定义的CSS样式
- 直接将需要的类添加给对应的标签,就可以得到想要的效果
栅格系统
Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。它包含了易于使用的预定义类,还有强大的mixin 用于生成更具语义的布局。
栅格
.container(固定宽度)
- row,column
- 在某个范围内取值是一定的
.container-fluid(100%宽度)
- row,column
- 会根据父盒子进行适当的缩放
默认将一行分为12份,在col后面对应的数字表示该单元格占几份
如果超过了12换行
如果想要在不同的品目宽度上,实现不同的布局,可以通过添加col-lg、col-md、col-sm、col-xs
如果只写了col-lg,那么会在小于1200的宽度下占一行
如果只写了col-lg col-md,那么会在小于992的宽度下占一行
如果只写了col-lg col-md col-ms,那么会在小于768的宽度下占一行
如果只写了col-lg col-md col-ms col-xs,会在对应的屏幕宽度下使用设置的值
实例:从堆叠到水平排列
栅格的好处
示例:微金所顶部通栏
- 栅格搭好框架
- 内部的子元素以及子元素的布局还是使用自己手写css的方式
JD_M案例知识点(移动端)的更多相关文章
- JavaEE开发之记事本完整案例(SpringBoot + iOS端)
上篇博客我们聊了<JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎>,并且在之前我们也聊了<Swift3.0服务端开发(五) 记事本的开发(iO ...
- Java进阶知识点:服务端高并发的基石 - NIO与Reactor AIO与Proactor
一.背景 要提升服务器的并发处理能力,通常有两大方向的思路. 1.系统架构层面.比如负载均衡.多级缓存.单元化部署等等. 2.单节点优化层面.比如修复代码级别的性能Bug.JVM参数调优.IO优化等等 ...
- vue 阻止冒泡弹窗小案例( 知识点:@click.stop=''")
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- 微软BI SSIS 2012 ETL 控件与案例精讲课程学习方式与面试准备详解
开篇介绍 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程从2014年9月开始准备,到2014年12月在 天善BI学院 ...
- transitionend的运用案例
transitionend事件代表着过渡动画结束后 原生的绑定方法 obj.addEventListener('transitionEnd', function(){ //do soming }) 我 ...
- 【h5+c3】web前端实战项目、快装webapp手机案例源码
快装WebApp项目(Web移动端开发案例)webapp移动端项目源码.html5+css3实战案例分享.微信端H5实例开发 简介快装WebApp是一个面向移动端的快速装修app,此项目为手机端:使用 ...
- 服务 AIDL 定向tag IPC Parcelable 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- AIDL 定向tag IPC 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
随机推荐
- Linux 循环创建多个线程
这里说一下相关的基础知识: 线程概念 什么是线程 LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线 ...
- 切换用户身份su与sudo
普通用户切换到root用户的方式有:su和sudo. 1,su - (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写) -l可以将 ...
- oracle数据库升级dbua操作阻塞解决方法(解决ORA-32004报错)
操作环境 1.SuSE11sp3操作系统 2.oracle 11.2.0.3版本升级到11.2.0.4版本 问题现象 oracle 11.2.0.3版本升级到11.2.0.4版本时执行dbua命令 ...
- C#图像处理:截图程序(包含鼠标)
截图后在picbox中显示,用定时器定时每毫秒截图一次,在picbox上显示就有动画效果.代码: [DllImport("user32.dll")] static extern b ...
- ABAP 字符串函数
CONCATENATE:合并字符串. CONCATENATE f1 … fn INTO g [SEPARATED BY h]. 1 * CONCATENATE合并字符串 2 DATA: c1(10) ...
- Gradle安装和在IDEA使用 基本操作
阅读目录 简单介绍 安装 使用idea创建一个web的Gradle项目 如何进行打包 解释build.gradle和settings.gradle 有关gradle的jar冲突 本地jar包位置和修改 ...
- c# 项目的导入
1.打开 2.手动添加现有项目,对照后找到未添加的空间,然后打开底层 选择 “#”文件打开即可 3.每个空间分别添加隐藏项 注意 bin与obj不需要添加 4.添加引用 5.可能需要删除 li ...
- elk6快速安装
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch [elasticsearch-6.x] name=Elasticsear ...
- poj2635(千进制取模+同余模定理)
题目链接:https://www.cnblogs.com/kuangbin/archive/2012/04/01/2429463.html 题意:给出大数s (s<=10100) ,L (< ...
- LibreOJ 6277. 数列分块入门 2
题目链接:https://loj.ac/problem/6278 参考博客:https://blog.csdn.net/qq_36038511/article/details/79725027 这题我 ...