这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战
☆☆☆ 今天学习的内容: ( 运动 函数的封装 ) !重要! ☆☆☆
可作为初学者的学习路线, 可参考一下, 学习进度也不是特别赶! 持续更新中
结合自己的理解, 用白话文简单又全面概括
JavaScript学习过程中的基础知识点, 方便加深理解!
开始今天的学习吧! '打牢地基才能筑高楼'! 加油! 认真对待!!
1、梳理复习昨天知识点
- 1、严格模式
"use strict"变量定义var八进制被禁用 函数必须声明在最顶端arguments和形参不同 - 2、let 关键字 块级作用域 { }
- 3、改变 this 指向:
bind()apply()call() - 4、
for of和for in - 5、定义常量关键字
const - 6、解构赋值
[]{} - 7、字符串模板
${ 变量或函数 } - 8、箭头函数
() => {}(a,b)=>{ return a + b } - 9、将具有
length属性的伪数组转成 数组Array.from - 10、
set集合 自动去重 不会有类型转换 数组去重Array.from( new Set([8,8,8,]) )[...new Set([])]Map集合var map = new Map()map.set("name","jack") - 11、Symbol 类型
var name = Symbol();
var json = {
sex : ""
}
json[name] = "lichune"
运动函数封装
- // obj 操作的元素
- // json 参数为 要操作的属性和目标值 键--属性 值--目标值
- // callback 回调函数
- // flag 开关变量 当值为 true 时,表示 所有的动作都执行完毕 ,可以关掉定时器 ,也可以进入下一个动作
var flag //开关变量 当值为true时,表示 所有的动作都执行完毕 ,可以关掉定时器 ,也可以进入下一个动作
function startMove(obj, json, callback) {
//attr表示要操作的属性
clearInterval(obj.timer)
obj.timer = setInterval(function () {
flag = true
var current = 0
for (var attr in json) {
if (attr == 'opacity') {
//操作透明度
//获取透明度的样式值
current = parseFloat(getStyle(obj, attr)) * 100
} else if (attr == 'zIndex') {
current = parseInt(getStyle(obj, attr)) //接收当前元素的样式值
} else {
current = parseInt(getStyle(obj, attr)) //接收当前元素的样式值
}
var speed = (json[attr] - current) / 10
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
if (current != json[attr]) {
//动作完成后的条件
flag = false //当目标值和当前的样式值 不相等时 , 将开关变量值关闭 false
} //定时器开启时 不停的改变元素的样式
if (attr == 'opacity') {
obj.style.opacity = (current + speed) / 100
} else if (attr == 'zIndex') {
obj.style.zIndex = json[attr]
} else {
obj.style[attr] = current + speed + 'px'
}
} // 循环结束后判断flag的值,当值为true时,表示 所有的动作都执行完毕 ,可以关掉定时器 ,也可以进入下一个动作
if (flag) {
clearInterval(obj.timer) // 上一个动作完成后 就开启下一个动作的执行 调用callback //判断 callback是否存在 存在就调用
if (callback) {
callback()
}
}
}, 30)
}
获取样式值函数
function getStyle(obj, attr) {
if (window.getComputedStyle) {
return window.getComputedStyle(obj, false)[attr]
} else {
return obj.currentStyle[attr]
}
}
运动实现
匀速运动 --- 缓冲运动 --- 多物体运动 --- 链式运动 --- 完美运动
抛物线运动 、圆周运动
多物体运动-需要各自拥有各自的定时器,互不干扰
缓冲运动 - -- 速度是可变的 :
应用: 轮播图上的运用.
原理:
var speed = (target - oDiv.offsetLeft) / 10
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
多物体运动 : 关键 让每一个物体运动时 定时器是独立的 互相不产生干扰
解决 : 将每一个运动的对象添加一个属性,属性值就是一个定时器
多物体运动函数封装:
function move(obj, target) {
clearInterval(obj.timer)
obj.timer = setInterval(function () {
var speed = (target - obj.offsetLeft) / 8
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
if (target == obj.offsetLeft) {
clearInterval(obj.timer)
} else {
obj.style.left = obj.offsetLeft + speed + 'px'
}
}, 30)
}
获取非行内元素样式值 >有兼容问题<
function getStyle(obj, attr) {
return window.getComputedStyle
? window.getComputedStyle(obj, false)[attr]
: obj.currentStyle[attr]
}
预告: 加油, 追梦人
【预告】: 接下来学习 js 运动函数封装-链式运动, 争取学到必知必会的吧..
学习就是一个不断进行的过程, 坚持下去, 定有收获!
日积月累, 巩固基础, 早进大厂!
坚持很不容易, 坚持下来更不容易, 你真棒!
Calm Down & Carry On!
更多阅读:
前文更新回顾
【重学 JS】每天学习巩固基础:
【day2】各种运算符、 【day3】数据类型、 【day4】循环结构 & 条件语句、 【day5】函数(重点)、 【day6】作用域 & 事件、
【day7】对象 & 数组方法总结、 【day8】字符串方法 & 部分排序、
【day9】Math 对象 & 封装函数、 【day10】BOM-浏览器对象模型、
【day12】Event 事件对象初识(一)、 【day13】Event 事件对象初识(二)、
【day15】拖拽实现 & 正则初识、 【day16】正则具体方法、 【day17】cookie、 【day18】ES6
更多期待在路上...任重而道远==-..-==