js基础和工具库

  1 /*
  2  *
  3  * 2015/4/18
  4  * js 基础 和 工具库
  5  *
  6  *
  7  * */
  8 //获取对象样式
  9 function hGetStyle(obj , attr){
 10     return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj ,null )[attr];
 11 }
 12
 13 //移动函数
 14 function hDoMove(obj , attr ,s ,target , endFn ){
 15     // 获取当前对象的的位置
 16     var pos = parseInt(hGetStyle(obj,attr));
 17     //如果目标点的位置 大于当前距离,那么 就是正向移动,否则就是负向移动
 18     s = target > pos ? s : -s;
 19     //清除上一个定时器
 20     clearInterval(obj.hDoMovetimer);
 21     //创建新的定时器
 22     obj.hDoMovetimer = setInterval(function(){
 23         //距离等于 当前对象的实时距离 +  每次要移动的距离
 24         var distance = parseInt(hGetStyle(obj,attr)) + s ;
 25         // 如果 上一步计算的距离大于 给定的目标点距离, 进行修正  =  目标距离
 26         if( distance > target && s > 0 || distance < target && s < 0){
 27             distance = target;
 28         }
 29         //  对象移动
 30         obj.style[attr] = distance + ‘px‘;
 31         // 如果距离 已经到达目标点, 清除定时器,执行回调函数
 32         if( distance === target){
 33             clearInterval(obj.hDoMovetimer);
 34             // 回调函数是否是未定义?  不是则执行
 35             endFn && endFn();
 36         }
 37     },20)
 38 }
 39 //抖动函数
 40 function hShake ( obj, attr, endFn ) {
 41     /*
 42      *   两种办法解决抖动函数隐患的问题:
 43      * 1. 进入函数先  进到一个if控制,永远不直接执行抖动函数的主体代码 , 而是取当前 对象的位置和  50毫秒后的位置 ,  比较是否相等, 如果相等,
 44      *          则 说明对象当前抖动已经结束, 可以执行抖动效果!(有稍微的一点小BUG)
 45      * 2.   如果用一个变量开关来控制,也是挺好的, 但是, 变量开关不能函数开始被初始化也不能在函数结束后被清除。。 否则,每次触发这函数都可以
 46      *         顺利的往下执行抖动函数的主体代码,那就不能修复问题。  需要一个变量,他能存在的时间更长,  将变量挂在 window 的身上的时候 (win
 47      * dow.flag = false),每次就只能触发一次 对象进行抖动,下一个需要等到上一个抖动的对象抖动结束后,才能抖动, 这种效果,并不是想要
 48      * 的,所以  , 将开关挂在 传递进来的 obj身上 是最好的选择, 每个对象身上的开关管理 各自身上的 抖动问题处理,而且obj.flag在函数执行结束后
 49      * 并没有被回收,因为,他是从函数外部传递进来的,生命期很长!! 这样再次触发函数的时候,obj.flag = true,这个条件成立  if(obj.flag)
 50      * {return}  ,不往下执行了。。。除非抖动结束后, num ===  数组的最后一个值, 这时候才 赋值 为 false.
 51      * */
 52     if(obj.flag) {return} ; //初始化 未定义(false 不执行 return),
 53     obj.flag = true; // 马上赋值 true,  这样再次触发 函数  上一个判断就为 真(obj.flag 是传递进来的对象的属性,而对象是从外部传进来的,所以 没有被回收), 直接返回 ,不执行以下代码。
 54
 55     var pos = parseInt( hGetStyle(obj, attr));    // 刚开始对象的位置
 56
 57     //抖动函数运动轨迹数组
 58     var arr = [];            // 20, -20, 18, -18 ..... 0
 59     var num = 0;
 60     var timer = null;
 61     //自动生成一个运动轨迹的数组
 62     for ( var i=20; i>0; i-=2 ) {
 63         arr.push( i, -i );
 64     }
 65     arr.push(0);
 66     //先清除定时器
 67     clearInterval( obj.shake );
 68
 69     obj.shake = setInterval(function (){
 70         obj.style[attr] = pos + arr[num] + ‘px‘;
 71         num++;
 72         //如果已经运动到最后一个值,清除定时器,执行回调函数
 73         if ( num === arr.length ) {
 74             clearInterval( obj.shake );
 75             endFn && endFn();
 76             obj.flag = false;  //抖动结束后, 赋值false, 再次触发这个函数,会执行顶部的判断,就能再次抖动拉
 77         }
 78     }, 50);
 79 }
 80
 81
 82 /*
 83 读取或者设置el元素的透明值,val取值为0-1
 84 */
 85 function hOpacity(el,val) {
 86     var f=el.filters,s=el.style;
 87     if (arguments.length==1)
 88         return f?(f.alpha?(f.alpha.opacity/100):1):(s.opacity||1);
 89     s.zoom=1;
 90     s.filter="alpha(opacity="+parseInt(val*100)+")";
 91     s.opacity=val;
 92 };
 93
 94 //透明度淡出函数
 95 function hFadeOut(obj , time ,endFn){
 96     obj.iNum = 0;
 97     clearInterval(obj.hFadeTimer);
 98     obj.hFadeTimer = setInterval(function(){
 99         obj.iNum++;
100         //使用设置和读取透明度函数
101         hOpacity(obj,hOpacity(obj)-0.1);
102         //处理有些浏览器透明度不能到零的问题。
103         if(obj.iNum >= 10){
104             obj.style.opacity = 0;
105             obj.iNum = 0;
106         }
107         if(hGetStyle(obj, ‘opacity‘) == 0){
108             clearInterval(obj.hFadeTimer);
109             endFn && endFn();
110         }
111     },time)
112 }
113
114
115 //获取当前并设置详细年月日期,设置第二个参数来确定获得的年月日详细情况
116 function hgetTime(iNum){
117     var hTime ={};
118
119     var myTime = new Date();
120
121     var iYear = myTime.getFullYear();
122     var iMonth = myTime.getMonth()+1;
123     var iDate = myTime.getDate();
124     var iWeek = myTime.getDay();
125     var iHours = myTime.getHours();
126     var iMin = myTime.getMinutes();
127     var iSec = myTime.getSeconds();
128
129     if( iWeek === 0 ) iWeek = ‘星期日‘;
130     if( iWeek === 1 ) iWeek = ‘星期一‘;
131     if( iWeek === 2 ) iWeek = ‘星期二‘;
132     if( iWeek === 3 ) iWeek = ‘星期三‘;
133     if( iWeek === 4 ) iWeek = ‘星期四‘;
134     if( iWeek === 5 ) iWeek = ‘星期五‘;
135     if( iWeek === 6 ) iWeek = ‘星期六‘;
136
137     //默认显示所有的年月日星期等详细的信息
138     if(iNum === 0 || typeof(iNum) == ‘undefined‘){
139         hTime.str = iYear+ ‘年‘ +iMonth+‘月‘+iDate+‘日 ‘+iWeek+‘ ‘+ toTwo(iHours)+‘ : ‘+ toTwo(iMin)+‘ : ‘+ toTwo(iSec);
140     }else if(iNum === 1){
141         hTime.str = toTwo(iHours)+‘ : ‘+ toTwo(iMin)+‘ : ‘+ toTwo(iSec);
142     }else if(iNum === 2){
143         hTime.str = toTwo(iHours)+toTwo(iMin)+toTwo(iSec);
144     }
145
146     function toTwo ( n ) {
147         return n < 10 ?  ‘0‘ + n : ‘‘ + n;
148     }
149     //时间戳
150     hTime.getTime = Math.floor( myTime.getTime()/1000 );
151     hTime.Hours = iHours;
152     hTime.Min = iMin;
153     hTime.Sec = iSec;
154     return hTime;
155 }
时间: 2024-08-04 05:07:38

js基础和工具库的相关文章

JS工具库之Lodash

破狼 JavaScript工具库之Lodash 2015-04-11 16:08 by 破狼, 235 阅读, 2 评论, 收藏, 编辑 你还在为JavaScript中的数据转换.匹配.查找等烦恼吗?一堆看似简单的foreach,却冗长无趣,可仍还在不停的repeat it!也许你已经用上了Underscore.js,不错,你已经进步很大一步了.然而今天我希望你能更进一步,利用lodash替换掉Underscore. lodash一开始是Underscore.js库的一个fork,因为和其他(U

js常用工具库XCLJsTool v1.0发布

最近有空,整了一个js的工具库,还没有正式用于项目中,自己也没有时间写测试用例,想了一下,还是贴出来给大家看看,如果有问题,请留言,非常感谢!项目我放在了github上面,会经常更新的,过段时间会发布一版! /** * 欢迎使用本程序,您可以任意修改.复制.分享本程序所有代码,只需要保留本注释即可,谢谢! * 项目地址:<span style="color:#ff0000;">https://github.com/xucongli1989/XCLJsTool</spa

node.js基础模块http、网页分析工具cherrio实现爬虫

node.js基础模块http.网页分析工具cherrio实现爬虫 一.前言      说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherrio. 使用http直接获取url路径对应网页资源,然后使用cherrio分析. 这里我主要学习过的案例自己敲了一遍,加深理解.在coding的过程中,我第一次把jq获取后的对象直接用forEach遍历,直接报错,是因为jq没有对应的这个方法,只有js数组可以调用. 二.知识点    ①:supera

封装自己的Common.js工具库

Code/** * Created by LT on 2013/6/16. * Common.js * 对原生JS对象的扩展 * Object.Array.String.Date.Ajax.Cookie */ ;(function(){ Object.extend =function(targetObj,fnJson){ for(var fnName in fnJson){ targetObj[fnName]=fnJson[fnName]; } return targetObj; }; /**

CSV.js – 用于 CSV 解析和编码的 JS 工具库

逗号分隔值(CSV )文件用于以以纯文本的形式存储表格化数据(数字和文本). CSV 文件包含任意数量的记录,通过某种换行符分隔,每条记录由字段,其他一些字符或字符串分隔,最常用的是文字逗号或制表符.CSV.js 是一个简单,超快的用于 CSV 解析和编码的 JavaScript 工具库,兼容浏览器,AMD 和 NodeJS 环境. 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[附源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12款经典的白富美型 jQuery 图片

Underscore.js工具库

Underscore 是一个 JavaScript 工具库,它提供了一整套函数式编程的实用功能,但是没有扩展任何 JavaScript 内置对象. 他解决了这个问题:"如果我面对一个空白的 HTML 页面,并希望立即开始工作,我需要什么?" 他弥补了 jQuery 没有实现的功能,同时又是 Backbone 必不可少的部分. http://www.bootcss.com/p/underscore/

JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布

JavaScript 工具库:Cloudgamer JavaScript Library v0.1 发布 研究了一年多的js,也差不多写一个自己的js库了.我写这个不算框架,只是一个小型的js工具库,所以我用的名字是Library.主要集合了我写js时一些常用的方法,并参考了prototype.js,jquery,google,百度,有啊等框架. 这个工具库的主要特点是: [跨浏览器]能在以下浏览器使用:IE6,IE7,IE8,Firefox 3.5.3,Chrome 3.0,Safari 4.

Vue.js 基础部分

### Vue.js 基础部分 ## 一. Vue.js 简介 ### 1. Vue.js 是什么 **Vue.js**也称为 Vue,读音/vju:/,类似 view,错误读音 v-u-e 版本: v2.6 - 是一个构建用户界面的框架 - 是一个轻量级 MVVM(Model-View-ViewModel)框架,和 angular.react 类似,其实就是所谓的数据双向绑定 - 数据驱动+组件化的前端开发(核心思想) - 通过简单的 API 实现**响应式的数据绑定**和**组合的视图组件*

js基础知识总结(2016.11.1)

js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避免全局变量和方法(命名空间,闭包,面向对象),模块化(seaJs,requireJs) 常用内部类:Data Array Math String HTML属性,CSS属性HTML:属性.HTML属性="值":CSS:对象.style.CSS属性="值"; class和f