您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 潮州分类信息网,免费分类信息发布

瀑布流JS插件

2024/6/16 11:10:38发布25次查看
自己编写的一个js瀑布流插件,里面有详细调用方法,代码易懂,新手学习,高手可路过。
/**
 *waterfall.js文件
 * 瀑布流插件
 * @author    gardenia 
 * window.onload = function(){
 *        waterfallinit({:''})//配置参数
 *        function success(data){}//添加节点函数,返回true 
 *    }
 *只需为瀑布流初始化函数 waterfallinit
 *配置一下函数
 *父类id:                parent:'main',
 *子类id:                 pin:'pin',
 *判断ajax是否返回成功:    successfn:success,
 *loading显示的图片地址     loadimgsrc:'./pic/load.gif',
 *没有更多数据显示的图片地址    endimg:'./pic/end.gif',
 *数据请求地址                requesturl:'request.php',
 *每次请求的图片数,默认15           requestnum:15,
 *选择显示时风格,可以不设置默认为1                style:4,
 *设置loading图片的id     loadimgid:loadimg,
 *
 *
 *添加数据到html successfn函数
    function success(data){
        var oparent = document.getelementbyid('main'); //获取父节点
        for(i in data){
                var opin = document.createelement('div');
                opin.classname = 'pin';
                oparent.appendchild(opin);
                var obox = document.createelement('div');
                obox.classname = 'box';
                opin.appendchild(obox);
                var oimg = document.createelement('img');
                oimg.src = './pic/'+data[i].src;
                obox.appendchild(oimg);
        }
return true;
    }
}
 *
 *
 **/
function waterfallinit(json){
    var parent = json.parent;
    var pin = json.pin;
    var successfn = json.successfn;
    var loadimgsrc = json.loadimgsrc;
    var endimgsrc = json.endimgsrc;
    var requesturl = json.requesturl;
    var requestnum = json.requestnum ? json.requestnum:10;
    var style = json.style;
    var loadimgid = json.loadimgid;
    var endimgid = json.endimgid;
    var oparent = document.getelementbyid(parent); //获取父节点
/*最初加载*/
    ajaxrequest();
/*触动滚动条循环加载*/
    var ajaxstate = true;
    var page = 0;
    var enddata = true;             
    window.onscroll = function(){
        if(checkscrollsite() && ajaxstate && enddata){ 
            page++;
            ajaxstate = false;
            ajaxrequest();
        }
    }
/*判断数据库数据返回数据是否为空*/
    function checkdata(data){
        var oparent = document.getelementbyid(parent); //获取父节点
        var bool = false;
        if(data[0] != undefined){
            bool = true;
        }else{
            bool = false;
        }
        return bool;
    }
/*ajax请求*/
    function ajaxrequest(){
            $.ajax({
                type:'get',
                url:requesturl,
                data:'page='+ page +'&requestnum=' + requestnum,
                datatype:'json',
beforesend:function(){
                    if(page){
var apin = getclassobj(oparent,pin); //父节点下的class子节点数组
                        var lastpinh = apin[apin.length-1].offsettop+
                            math.floor(apin[apin.length-1].offsetheight);
addimg(loadimgsrc,loadimgid);
                    }
                },
                success:function(data){
                    if(successfn(data)){
                        waterfall(parent,pin,style);
                        enddata = checkdata(data);
                        if(!enddata){
                            addimg(endimgsrc,endimgid);
                        }
                    }
},
                complete:function(data){
                    if(page){
                        oparent.removechild(document.getelementbyid(loadimgid));
                    }    
                    ajaxstate = true;
}
            })
    }
/*校验滚动条位置*/
    function checkscrollsite(){
        //var apin = getclassobj(oparent,pin); //父节点下的class子节点数组
        var scrolltop = document.documentelement.scrolltop || document.body.scrolltop;
        var documenth = document.documentelement.clientheight; 
        return getlasth()    }
/*获取最末尾最短高度*/
    function getlasth(){
        var apin = getclassobj(oparent,pin); //父节点下的class子节点数组
        var lastpinh = apin[apin.length-1].offsettop+math.floor(apin[apin.length-1].offsetheight);
        return lastpinh;
    }
/*增加图片标签,如:loading图标*/
    function addimg(src,id){
        var loadimg = document.createelement('img');
        loadimg.src = src;
        loadimg.id  = id;
        oparent.appendchild(loadimg);
        loadimg.style.position = 'absolute';
        loadimg.style.top = getlasth() + 'px';
        loadimg.style.left = math.floor(oparent.offsetwidth - loadimg.offsetwidth)/2 + 'px';
}
}
/*
*瀑布流排列
*
*/
function  waterfall(parent,pin,style){
    var oparent = document.getelementbyid(parent); //获取父节点
    var apin = getclassobj(oparent,pin); //父节点下的class子节点数组
    //alert(apin.length);
    var ipinw = apin[0].offsetwidth; //获取固定宽度
    var num = math.floor(oparent.offsetwidth/ipinw); //获取横向组数
    oparent.style.csstext = 'width:' + num*ipinw +'px;margin:0px auto;position:relative'; //父类具体宽度
var compareaarr = [];
    var copareall =[];
    //alert(apin.length);
    for(var i=0;i        if(i            compareaarr[i] = apin[i].offsetheight;//获取每个子节点的高度
        }else{
            var minh = math.min.apply('',compareaarr);//获取最小值
            var minkey = getminkey(compareaarr,minh);//获取最小值的键值
            compareaarr[minkey] += apin[i].offsetheight;
            setmovestyle(apin[i],minh,apin[minkey].offsetleft,i,style);
}
    }
}
/*
*通过class选择元素 
*/
function getclassobj(parent,classname){
    var obj = parent.getelementsbytagname('*');
    var result = [];
    for (var i = 0; i         if (obj[i].classname == classname) {
            result.push(obj[i]);
        }
    }
    return result;
}
/**设置运动风格
*setmovestyle
*@param  obj 对象
*@param  top 飞入布局 
*@param  left 飞入布局
*@param  index 
*@param  style 飞入形势选择
*1、从底下中间飞入
*2、透明度渐现
*3、从左右两边飞入
*4、从各组下渐现飞入
**/
var startnum = 0;
function setmovestyle(obj,top,left,index,style){
    /*if(index         return;
    }*/
    obj.style.position = 'absolute';
    switch(style){
        case 1: //从底下中间飞入
        obj.style.top = gettotalh() + 'px';
        obj.style.left = math.floor((document.documentelement.clientwidth-obj.offsetwidth)/2) + 'px';
        $(obj).stop().animate({
            top:top,
            left:left
        },600);
        break;
        case 2://渐现
        obj.style.top = top + 'px';
        obj.style.left = left + 'px';
        obj.style.apacity = 0;
        obj.style.filter = 'alpha(opacity=0)';
        $(obj).stop().animate({
            opacity:1,
        },1000);
        break;
        case 3:
        obj.style.top = gettotalh() + 'px';
if(index % 2){
            obj.style.left = -obj.offsetwidth + 'px';
        }else{
            obj.style.left = document.documentelement.clientwidth + 'px';
}
        $(obj).stop().animate({
            top:top,
            left:left
        },1000);
        break;
        case 4:
        obj.style.top = gettotalh() + 'px';
        obj.style.left = left +'px';
        $(obj).stop().animate({
            top:top,
            left:left
        },1600);
        break;
}
    //更新索引
    startnum = index;
}
/*获取滚动条的高度,总高度*/
function gettotalh(){
    return document.documentelement.scrollheight || document.body.scrollheight;
}
/** 
*获取图片数组最小值的键值
*
*/
function getminkey(arr,minh){
    for (key in arr) {
        if(arr[key] == minh){
            return key;
        }
    }
}
/*先图片返回数据从而固定布局,一般不用*/
function callback(w,h,imgobj){
    //alert(w+':'+h);
    imgobj.style.width = 205 + 'px';
    var scale =  w/205;
    imgobj.style.height = math.floor(h/scale)+ 'px';
}
/*先返回数据固定好布局后,图像加载*/
function loadimg(url,fn,imgobj){ 
    var img = new image();
    img.src = url;
    if(img.complete){
        //alert(img.width);
        fn(img.width,img.height,imgobj);
    }else{
        img.onload = function(){
            fn(img.width,img.height,imgobj);
        }
    }
}主页文件:index.htmlnbsp;html public -//w3c//dtd xhtml 1.0 transitional//en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd>
瀑布流第一课
请求文件:request.php图片实例:
http://huaban.com/pins/93310215
数据库waterfall创建代码:
--
-- 表的结构 `demo`
--create table if not exists `demo` (
  `id` int(10) not null auto_increment,
  `title` char(15) collate utf8_bin not null,
  `src` char(13) collate utf8_bin not null,
  `time` int(13) not null,
  primary key (`id`)
) engine=innodb  default charset=utf8 collate=utf8_bin auto_increment=1;
ad:真正免费,域名+虚机+企业邮箱=0元
潮州分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录