我的js运动库新
1、一些样式的获取和设置
//通过id获取当前元素
//params:id
function $id(id) {
return document.getElementById(id);
}
//向css一样获取元素
function $(selector) {
return document.querySelector(selector);
}
//向css一样,获取一组元素
function $all(selector) {
return document.querySelectorAll(selector);
} //下边是有关运动的一些方法
//获取当前元素的样式值(兼容写法)
//param:obj(元素对象),attr(属性)
function getStyle(obj,attr) {
if (window.getComputedStyle) {
if(attr == "opacity"){//如果是透明度,则返回100倍的数
return parseFloat(window.getComputedStyle(obj,false)[attr])*100;
}else if(attr == "zISndex"){
return parseInt(window.getComputedStyle(obj,false)[attr]);
}else{
return parseFloat(window.getComputedStyle(obj,false)[attr]);
}
} else {//ie8及以下浏览器的兼容
if(attr == "opacity"){//如果是透明度,则返回100倍的数
return parseInt(obj.currentStyle["filter"]);
}else if(attr == "zIndex"){
return parseInt(obj.currentStyle[attr]);
}else{
return parseFloat(obj.currentStyle[attr]);
}
}
}
//设置属性值
function setStyle(obj,attr,index) {
if (window.getComputedStyle) {
if(attr == "opacity"){//如果是透明度,则返回100倍的数
obj.style[attr] = index/100;
}else if(attr == "zIndex"){
obj.style[attr] = index;
}else{
obj.style[attr] = index + "px";
}
} else {//ie8及以下浏览器的兼容
if(attr == "opacity"){//如果是透明度,则返回100倍的数
// filter: alpha(opacity=20);
obj.style["filter"] = "alpha(opacity=" + index + ")";
}else if(attr == "zIndex"){
obj.style[attr] = index;
}else{
obj.style[attr] = index + "px";
}
}
}
2、匀速运动
//匀速运动
//params:obj(运动的对象),attr(变化的样式名称),target(目标值),speed(每次运动的距离),time(运动间隔)
function linear(obj,attr,target,speed,time) {
//取消其他该对象的定时器,避免重复点击从而开启多个定时器的bug
clearInterval(obj.timer);
//开启定时器,进行运动
obj.timer = setInterval(function () {
//获取当前元素的属性值,为数字类型
var currentAttr = getStyle(obj,attr);
//判断是否达到了目标值
if (Math.abs(currentAttr - target)<Math.abs(speed)) {
//这里设置的原因是可能不能达到目标值,我们需要手动设置
setStyle(obj,attr,target);
//关掉定时器
clearInterval(obj.timer);
} else {
setStyle(obj,attr,currentAttr+speed);
}
},time);
}
//匀速运动
//params:obj(运动的对象),attr(变化的样式名称),target(目标值),speed(每次运动的距离),time(运动间隔)
function linear2(obj, attr, target, speed, time,callback) {
//取消其他该对象的定时器,避免重复点击从而开启多个定时器的bug
clearInterval(obj.timer);
//开启定时器,进行运动
obj.timer = setInterval(function () {
//获取当前元素的属性值,为数字类型
var currentAttr = getStyle(obj, attr);
//判断是否达到了目标值
if (Math.abs(currentAttr - target) < Math.abs(speed)) {
//这里设置的原因是可能不能达到目标值,我们需要手动设置
setStyle(obj, attr, target);
//关掉定时器
clearInterval(obj.timer);
callback();
} else {
setStyle(obj, attr, currentAttr + speed);
}
}, time);
}
3、缓冲运动
//缓冲运动(从快变慢)
//params:obj(元素对象),attr(属性),target(最终目标),time(时间间隔)
function slower(obj,attr,target,time) {
clearInterval(obj.timer);
//定义初始速度
var speed = 0;
obj.timer = setInterval(function () {
//获取当前元素的属性值
var currentAttr = getStyle(obj,attr);
//计算当前速度(当前值与目标值差值的十分之一)
speed = (target - currentAttr) / 10;
//避免由于精度问题导致的不能达到目标值(取大数)
speed = speed>0? Math.ceil(speed):Math.floor(speed);
if (currentAttr == target) {
clearInterval(obj.timer);
} else {
setStyle(obj,attr,speed+currentAttr);
}
},time);
}
//缓冲运动(从快变慢)添加一个对象的其他运动连续进行
//params:obj(元素对象),attr(属性),target(最终目标),time(时间间隔),callback(回调函数)
function slower2(obj,attr,target,time,callback) {
clearInterval(obj.timer);
//定义初始速度
var speed = 0;
obj.timer = setInterval(function () {
//获取当前元素的属性值
var currentAttr = getStyle(obj,attr);
//计算当前速度(当前值与目标值差值的十分之一)
speed = (target - currentAttr) / 10;
//避免由于精度问题导致的不能达到目标值(取大数)
speed = speed>0? Math.ceil(speed):Math.floor(speed);
if (currentAttr == target) {
clearInterval(obj.timer);
// 上一个动作完成 进入下一个动作
if (callback) {
callback();
}
} else {
setStyle(obj,attr,speed+currentAttr);
}
},time);
}
//缓冲运动(从快变慢)添加一个对象的其他运动连续进行,添加一个对象同时的多个属性运动
//params:obj(元素对象),json {attr:target},time(时间间隔),callback(回调函数)
function slower3(obj,json,time,callback) {
clearInterval(obj.timer);
//定义初始速度
var speed = 0;
obj.timer = setInterval(function () {
//循环所有传入的属性
for (var attr in json) {
//获取当前元素的属性值
var currentAttr = getStyle(obj,attr);
console.log(currentAttr); //计算当前速度(当前值与目标值差值的十分之一)
speed = (json[attr] - currentAttr) / 10;
//避免由于精度问题导致的不能达到目标值(取大数)
speed = speed>0? Math.ceil(speed):Math.floor(speed);
if (currentAttr == json[attr]) {
clearInterval(obj.timer);
// 上一个动作完成 进入下一个动作
if (callback) {
callback();
}
} else {
setStyle(obj,attr,speed+currentAttr);
}
} },time);
}
我的js运动库新的更多相关文章
- Raphael Js矢量库API简介:
Raphael Js矢量库API简介:Raphael Javascript 是一个 Javascript的矢量库. 2010年6月15日,著名的JavaScript库ExtJS与触摸屏代码库项目jQT ...
- 原生javascript写自己的运动库(匀速运动篇)
网上有很多JavaScript的运动库,这里和大家分享一下用原生JavaScript一步一步写一个运动函数的过程,如读者有更好的建议欢迎联系作者帮助优化完善代码.这个运动函数完成后,就可以用这个运动函 ...
- Atitit js es5 es6新特性 attilax总结
Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ...
- 解析JS运动
解析JS运动 物体运动原理:通过改变物体的位置,而发生移动变化. 任何运动都是相对的,就像物理中的运动公式:s(要达到的)=s0(当前的样式值)+vt. 方法: 1.运动的物体使用绝对定位 ...
- Node.js 基础库
全局对象 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global对象的属性. 我们在 Node.js 中能够直接访问到对象通常都是 global ...
- 带无缝滚动的轮播图(含JS运动框架)
今天学习了一下轮播图的写作,想到前一阵学过的无缝滚动得思想,所以就把轮播与滚动结合了一下.不过我的代码的神逻辑我自己都不敢恭维,在没网没参照的情况下,只能硬着头皮往下写,希望跟大家共勉吧. js运动框 ...
- js运动框架之一条乱跑的虫子
克隆与运动框架的联合应用 效果:点击元素块后,元素块开始随机的向任何方向移动,并附带一堆颜色随机的"尾巴".每个方向运动3秒后改变方向,同时笑脸变哭脸. 如图所示: 朝某个方向运动 ...
- Gremlins.js – 模拟用户随机操作的 JS 测试库
Gremlins.js 是基于 JavaScript 编写的 Monkey 测试库,支持 Node.js 平台和浏览器中使用.Gremlins.js 随机模拟用户操作:单击窗口中的任意位置,在表格中输 ...
- JS运动从入门到兴奋1
hello,我是沐晴,一个充满了才华,却靠了照骗走江湖的前端妹子.在这个充满PS的年代,这你们都信,哈哈,废话不多说,今天要分享的是关注JS运动的知识.楼主一直认为,不管学习什么,核心思想才是王道,掌 ...
随机推荐
- day12 bash中的if、for
bash 变量bash 定义:x= 作用:记录状态 规则:字母开头,后面可以接字母.数字.下划线 export args:将变量定义为全局变量 $$[]:括号中可以进行简单的数学整数运算,可以用ech ...
- 概率dp——hdu4089推公式+循环迭代
迭代是化简公式的常用技巧 dp[i][j]表示队伍中有i人,tomato排在第j位出现情况2的概率,那么先推出公式再进行简化 dp[i][1]=p21*dp[i][i] + p41 j<=k : ...
- tyvj 1194 划分大理石(多重背包)
传送门 解题思路 二进制优化多重背包裸题. 代码 #include<iostream> #include<cstdio> #include<cstring> #in ...
- HTML5能取代Android和iOS应用程序吗?
大量新生移动设备的兴起,改变了互联网的未来.在技术的发展上,HTML5会取代App应用吗?或者说能够在多大程度上取代呢?在HTML5规范中,已经加入了相机.磁力罗盘.GPS信息的支持.很多新兴浏览器也 ...
- Linux课程---14、linux下lamp环境如何安装
Linux课程---14.linux下lamp环境如何安装 一.总结 一句话总结: 要按顺序安装,比如apache需要在php之前安装, 一.安装 gcc 编译器 二.卸载 rpm 安装的 http ...
- linux下phpstudy安装
linux下phpstudy安装 一.总结 一句话总结: 就是下载然后一步步用指令安装即可 二.linux下phpstudy安装 参考:linux下phpstudy安装https://www.cnbl ...
- Hadoop 与 Spark 对比
Hadoop进行海量数据分析,MR频繁落地,IO操作,计算时间就拉长.由于这种设计影响,计算过程中不能进行迭代计算.造成网络节点数据传输. Spark从理念上就开始改变.应用scala特点解决上面的核 ...
- 国外主机如何ICP备案
想都不要想了,无法备案. 因为,备案是在主机服务器提供商处的备案平台提交申请,国外的主机服务商是没有这种平台服务的.(跟你域名在哪儿买的没关系) 下面,把昨天折腾到半夜的过程记录一下,希望可以帮到需要 ...
- map 与 lambda 的用法
# 列表中的每个元素进行*2lis = [10, 30, 70]f = map(lambda li: li*2, lis) # 操作lis中的每个元素.print(list(f)) # 返回来一个新的 ...
- 6_1.springboot2.x整合JDBC与数据源配置原理解析
1.引言 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合 Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置.引入各种xxxTemplate,x ...