iTakeo

Archive for 7 月, 2015

随机排序抽奖…

这个是昨天晚上看电视里面有个抽奖效果,看起来觉得有点意思,就自己写了下,暂时就叫他随机排序抽奖吧。其实原理也没啥,就是随机修改位置,点击的时候,覆盖css就可以了,具体看下面的演示:

(更多…)

2015/07/15 0 /
未分类
/
标签:  暂无标签

图片懒加载(按需加载)…

图片懒加载,也可以叫做按需加载,它是对网页性能优化的一种方案,达到节省资源,加快浏览速度的目的。各大网站都使用这个技术,例如谷歌的图片搜索页,天猫,淘宝,京东等。

其实原理也很简单,就是判断图片是否在可视区内。首先给图片的src设置一个loading图片,或者一个1像素的透明图片,然后设置一个自定义属性,比如_src,或者使用data-src,如果页面滚动的时候,图片达到可视区内的话,就把自定义属性_src赋值给src。下面就简单的介绍一下基本的代码实现过程。

下面是dom结构

//设置图片的data属性为真实地址,src可以是一张透明图片。  
<img src="images/1x1.png" data-src="images/p.jpg"> 
01.
02.

下面是js代码

//函数调用,可以不传参数  
lazy.init()  
//也可以带参数,参数为容器的ID或者class  
lazy.init('#wrap');  
lazy.init('.wrap'); 
01.
02.
03.
04.
05.
var lazy = {  
    //初始化函数  
    init : function(){  
        //判断需要根据哪个容器来懒加载图片,如果没有参数,则是根据document  
        var _ele = document.querySelector(arguments[0]) || document;  
        //获取容器里面所有的图片  
        var _img = _ele.querySelectorAll('img'),_this = this;  
        //初始执行一次  
        this.set(_img);  
        //给window绑定scroll事件  
        this.addEvent(window,'scroll',function(){  
            _this.set(_img)  
        });  
        //给window绑定resize事件  
        this.addEvent(window,'resize',function(){  
            _this.set(_img)  
        });  
    },  
    //设置图片  
    set : function(_img){  
        //获取可视区的高度  
        var _h = document.documentElement.clientHeight;  
        //然后循环img  
        for (var i=0;i<_img.length;i++) {  
            //判断是否出现
            if(!_img[i].off && (_img[i].getBoundingClientRect().top) <  _h ){  
                 //设置src  
                _img[i].src = _img[i].getAttribute('data-src');  
                //删除自定义_src属性  
                _img[i].removeAttribute('data-src');  
                //设置一个开关,防止每次滚动都重新修改src  
                _img[i].off = true;  
            }  
        };  
    },  
    //绑定事件  
    addEvent : function (obj,types,fn){  
        obj.attachEvent ? obj.attachEvent('on'+types,fn) : obj.addEventListener(types,fn,false)  
    }  
} 
01.
02.
03.
04.
05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.

(更多…)

2015/07/14 1 /
未分类
/
标签:  暂无标签

解决移动端输入法遮盖input输入框的问题…

大家在做移动端的时候,有没有遇到当有输入框在页面最下面的时候,点击input输入框会被输入法遮住了,这个在Android系统貌似没有这个bug,可能是我测试的机器不够多,在ios系统中,原生输入法貌似也不会引起这个问题,但是第三方的输入框肯定会这样。

点击这个链接查看有bug的demo

如果你点击了上面的demo,会发现最下面的input输入框在获得焦点的时候,会被输入法遮盖住了。

其实解决这个很简单,网上大都使用fixed定位到顶部,是可以解决,但是下面的内容会暴露出来,虽然通过嵌套一层能解决,而且脱离文档流,可能有样式问题,无疑又麻烦了,所以个人不太喜欢这个方法,我是通过给body添加scrollTop,把input的位置挪到最上面就可以了。可以看下面的图片。

(更多…)

2015/07/13 2 /
未分类
/
标签:  暂无标签

js对输入文字个数的限制…

发表留言或者微博的时候,对输入文字个数的限制,下面分两种情况,每种分别介绍两种实现方式:

第一种:一个汉字算一位,两个字母或符号算一位。

通过ASCII编码来判断

  1. textarea.onkeyup = function(){  
  2.     //[^\x00-\xff]即ASCII编码不在0-255的字符,也就是汉子了,先把所有汉子换成任意两个字符,最后除以2,得到一个字符  
  3.     var n = 150- Math.floor(this.value.replace(/[^\x00-\xff]/g,“aa”).length/2)  
  4.     span.innerHTML = n <=0 ? 0 : n;   
  5. };  

(更多…)

2015/07/13 2 / /
标签:  暂无标签

js对DOM节点的操作整理…

js对DOM节点的操作整理…

获取节点:

  1. //按照ID获取  
  2. document.getElementById(‘element’);    
  3. //按照节点名称获取,返回类数组对象   
  4. document.getElementsByTagName(‘element’);   
  5. //按照name名称获取,返回类数组对象  
  6. document.getElementsByName(‘element’);    
  7. // 按照className获取,返回类数组对象,IE7及以下并不支持;     
  8. document.getElementsByClassName(‘className’)    
  9. //html5提供的新接口,类似jq的选择器,可以使用层叠关系,多选,返回值为第一个元素  
  10. document.querySelector(‘.element’)  //根据class  
  11. document.querySelector(‘#element’)  //根据id  
  12. document.querySelector(‘#element .div’)  //层叠关系  
  13. document.querySelector(‘.div,.div2’)  //多选  
  14. document.querySelector(“div.test > p:first-child”);  //子选择器  
  15. document.querySelector(“div.test + p”);  //兄弟选择器  
  16. document.querySelector(“div[type=qq]”)   //属性选择器;  
  17. //使用方法同上,也是html5提供的新接口,这个返回类数组对象     
  18. document.querySelectorAll(‘.element’)  

(更多…)

2015/07/13 1 / /
标签:  暂无标签

js对数组对象的操作…

1、定义数组,有三种定义方式:

方式一:

  1. var arr=new Array();  
  2. arr[0]=“11”;  
  3. arr[1]=“22”;  
  4. arr[2]=“33”;  

方式二:

  1. var arr=new Array(“11”,“22”,“33”);  

方式三:

  1. var arr=[“11”,“22”,“33”];  

2、数组的length属性,可以获取数组的长度,也可以截取,清空数组,如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失。如果设置的值比它的当前值大,数组的长度将增大,新的元素被添加到数组的尾部,它们的值为 undefined:

  1. var arr=[“11″,”22″,”33”];    
  2. arr.length    //3,返回数组的长度    
  3. arr.length = 2   //[’11’,’22’],截取数组前2个    
  4. arr.length = 5   //[’11’,’22’,undefined,undefined,undefined],自动添加undefined    
  5. arr.length = 0  //[],清空数组   

(更多…)

2015/07/11 1 /
未分类
/
标签:  暂无标签

HTML5拖放(Drag 和 drop)…

首先,为了使元素可拖动,需要给元素添加draggable的 属性,并且设置为 true :

  1. <div draggable=“true”></div>  

当元素拖动时,会发生以下几个事件,虽然跟鼠标的mousedown,mousemove和mouseup类似,但是也有区别:

  1. ondragstart //拖拽开始  
  2. ondrag        //拖拽持续  
  3. ondragend  //拖拽结束  

(更多…)

2015/07/11 2 / /
标签:  暂无标签

树叶飘落效果解析…


之前写过一次类似树叶落下的效果,当时想到的方法是,动态的往body里面添加元素,添加一些随机的属性,然后写一个动画,让他按照随机的速度落下,达到一种落差的效果,最后判断top值是否超过clientHeight,超过就remove掉。

嗯,看样子不错,也能跑起来,但是在安卓手机上测试,会有卡顿,后来优化了下,改成css3动画,再次测试,不错,安卓也不卡了,挺流畅,但是代码量又增加了,并且这样反复的对dom进行属性的重绘,添加和删除,效率很低。

今天换了另一种写法,所有动画效果全部利用css3来完成,也不用反复的进行dom添加和删除操作了,并且代码量是之前的三分之一。先看下面的演示效果吧。

(更多…)

2015/07/09 1 / /
标签:  暂无标签

js操作字符串和数字的方法整理…

对字符的各种操作有时候总会忘记几个,这次做一下整理:

length – 返回字符串的长度

  1. ‘abcd’.length;  //4  

Math.ceil(num) – 向上取整,不管小数点后面是多少,哪怕.00001,也会向上进一位。

  1. Math.ceil(25.9); //26  
  2. Math.ceil(25.5); //26  
  3. Math.ceil(25.1); //26  

Math.floor(num) – 向下取整,不管小数点后面是多少,哪怕.99999,也会向下减一位。

  1. Math.floor(25.9); //25  
  2. Math.floor(25.5); //25  
  3. Math.floor(25.1); //25  

(更多…)

2015/07/08 0 /
未分类
/
标签:  暂无标签

移动端开发备忘…

这是一些移动端开发的备忘记录。

<meta> 元素

  1. <meta name=“viewport” content=“width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no”/>  
  1. width:宽度(数值 / device-width)(范围从200 到10,000,默认为980 像素)  
  2. height:高度(数值 / device-height)(范围从223 到10,000)  
  3. initial-scale:初始的缩放比例 (范围从>0 到10)  
  4. minimum-scale:允许用户缩放到的最小比例  
  5. maximum-scale:允许用户缩放到的最大比例  
  6. user-scalable:用户是否可以手动缩 (no,yes)   

(更多…)

2015/07/08 1 /
未分类
/
标签:  暂无标签
1/2
1
 
2
 
回到顶部