分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

我的js运动库新

发布时间:2023-09-06 02:34责任编辑:苏小强关键词:js

1、一些样式的获取和设置

//通过id获取当前元素//params:idfunction $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运动库新

原文地址:https://www.cnblogs.com/dhrwawa/p/10468796.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved