javascript读取Json数据并分页显示,支持键盘和滚轮翻页

作者:marlon119 来源:经典论坛 时间:2010-01-06 13:03:00 



闲着没事看到国外一个酷站欣赏的网站不错,不过他是用FLASH做的,于是想着用JS也写一个看看,技术有限写的不是很完美,还有一些小的BUG不知道怎么解决,主要目的是练手。

function $(id){return document.getElementById(id);} //定义获取ID的方法
function GotoPage(num){ //跳转页
    Page = num;
    OutputHtml();
}
var PageSize = 9; //每页个数
var Page = 1; //当前页码
function OutputHtml(){
    
    var obj = eval(siteList);  //获取JSON
    var sites = obj.sites;
    
    //获取分页总数
    var Pages = Math.floor((sites.length - 1) / PageSize) + 1;
    if(Page < 1)Page = 1;  //如果当前页码小于1
    if(Page > Pages)Page = Pages; //如果当前页码大于总数
    var Temp = "";
    
    var BeginNO = (Page - 1) * PageSize + 1; //开始编号
    var EndNO = Page * PageSize; //结束编号
    if(EndNO > sites.length) EndNO = sites.length;
    if(EndNO == 0) BeginNO = 0;
    
    if(!(Page <= Pages)) Page = Pages;
    $("total").innerHTML = "Total:<strong class='f90'>" + sites.length + "</strong>&nbsp;&nbsp;Show:<strong class='f90'>" + BeginNO + "-" + EndNO + "</strong>";
    
    //分页
    if(Page > 1 && Page !== 1){Temp ="<a href='javascript:void(0)' onclick='GotoPage(1)'>&lt;&lt;Index</a> <a href='javascript:void(0)' onclick='GotoPage(" + (Page - 1) + ")'>Previous</a>&nbsp;"}else{Temp = "&lt;&lt;Index Previous&nbsp;"};
    
    //完美的翻页列表
    var PageFrontSum = 3; //当页前显示个数
    var PageBackSum = 3; //当页后显示个数
    
    var PageFront = PageFrontSum - (Page - 1);
    var PageBack = PageBackSum - (Pages - Page);
    if(PageFront > 0 && PageBack < 0)PageBackSum += PageFront; //前少后多,前剩余空位给后
    if(PageBack > 0 && PageFront < 0)PageFrontSum += PageBack; //后少前多,后剩余空位给前
    var PageFrontBegin = Page - PageFrontSum;
    if(PageFrontBegin < 1)PageFrontBegin = 1;
    var PageFrontEnd = Page + PageBackSum;
    if(PageFrontEnd > Pages)PageFrontEnd = Pages;
    
    if(PageFrontBegin != 1) Temp += '<a href="javascript:void(0)" onclick="GotoPage(' + (Page - 10) + ')" title="前10页">..</a>';
    for(var i = PageFrontBegin;i < Page;i ++){
        Temp += " <a href='javascript:void(0)' onclick='GotoPage(" + i + ")'>" + i + "</a>";
    }
    Temp += " <strong class='f90'>" + Page + "</strong>";
    for(var i = Page + 1;i <= PageFrontEnd;i ++){
        Temp += " <a href='javascript:void(0)' onclick='GotoPage(" + i + ")'>" + i + "</a>";
    }
    if(PageFrontEnd != Pages) Temp += " <a href='javascript:void(0)' onclick='GotoPage(" + (Page + 10) + ")' title='后10页'>..</a>";
    
    if(Page != Pages){Temp += "&nbsp;&nbsp;<a href='javascript:void(0)' onclick='GotoPage(" + (Page + 1) + ");'>Next</a> <a href='javascript:void(0)' onclick='GotoPage(" + Pages + ")'>Last&gt;&gt;</a>"}else{Temp += "&nbsp;&nbsp;Next Last&gt;&gt;"}
    
    $("pagelist").innerHTML = Temp;
    
    //输出数据
    
    if(EndNO == 0){ //如果为空
        $("content").innerHTML += "<h1>No Images</h1>";
        return;
    }
    var html = "";
        
    for(var i = BeginNO - 1;i < EndNO;i ++){
        html += "<div class='entry'>";
        html += "<a href='" +sites[i].Url+ "' rel='bookmark' title=" +sites[i].Name+ ">";
        html += "<img src='" +sites[i].Pic+ "' width='200' height='170' />";
        html += "<p class='url'><span>" +sites[i].Name+ "</span></p></a>";
        html += "</div>";
        
    }
    $("content").innerHTML = html;
    clickShow(); //调用鼠标点击事件
    
    //键盘左右键翻页
    document.onkeydown=function(e){
        var theEvent = window.event || e;
        var code = theEvent.keyCode || theEvent.which;
        if(code==37){
            if(Page > 1 && Page !== 1){
                GotoPage(Page - 1);
                
            }
        }
        if(code==39){
            if(Page != Pages){
                GotoPage(Page + 1);
            }
        }
    }
    
    
    //鼠标滚轮翻页
function handle(delta){
    if (delta > 0){
        if(Page > 1 && Page !== 1){
            GotoPage(Page - 1);
        }        
    }
    else{
        if(Page != Pages){
            GotoPage(Page + 1);
        }
    }
}
function wheel(event){
    var delta = 0;
    if (!event) /* For IE. */
        event = window.event;
    if (event.wheelDelta) { /* IE或者Opera. */
        delta = event.wheelDelta / 120;
        /** 在Opera9中,事件处理不同于IE
        */
    if (window.opera)
        delta = -delta;
    } else if (event.detail) { /** 兼容Mozilla. */
    /** In Mozilla, sign of delta is different than in IE.
    * Also, delta is multiple of 3.
    */
    delta = -event.detail / 3;
    }
    /** 如果 增量不等于0则触发
    * 主要功能为测试滚轮向上滚或者是向下
    */
    if (delta)
        handle(delta);
}
/** 初始化 */
if (window.addEventListener)
    /** Mozilla的基于DOM的滚轮事件 **/
    window.addEventListener("DOMMouseScroll", wheel, false);
    /** IE/Opera. */
    window.onmousewheel = document.onmousewheel = wheel;
    
    
}
//获取链接地址和网站名称
function showLink(source){
    var siteUrl = $("siteurl");
    var siteName = $("sitename");
    var description = $("description");
    
    if(source.getAttribute("rel") == "bookmark"){
        var url = source.getAttribute("href");
        var title = source.getAttribute("title");
        siteUrl.innerHTML = "<a href='" + url + "' target='_blank'>"+ url +"</a>";
        siteName.innerHTML = title;
    }
    
}
//鼠标点击事件
function clickShow(){
    var links = $("content").getElementsByTagName("a");
    for(var i=0; i<links.length; i++){
        var url = links[i].getAttribute("href");    
        var title = links[i].getAttribute("title");
        links[i].onclick = function(){
            showLink(this);
            return false;
        }
    }
}

说明:

1、读取外部数据JSON并根据设置分页显示,添加删除酷站都可以在JSON文件里改;

2、点击酷站后,右侧的框里显示网站的地址和名称并带有链接,DESCRIPTION部分偷了个懒没写,需要的可以自己加;

3、支持键盘翻页和鼠标滚轮翻页;

BUG:

1、鼠标滚轮翻页在FF3下会有问题,来回在第一页和最后一页跳;

2、IE6下JS文件不能外调,否则会出错,其它浏览器正常。

演示地址:http://www.mykite.cn/demo/json/dome1/json.html

下载地址:

远程下载:jsonsite.rar (929.77 KB) 本地下载:jsonsite.rar (929.77 KB)

标签:json,分页,JavaScript,键盘
0
投稿

猜你喜欢

  • 文字适度阅读的宽度或者字数

    2007-10-26 07:31:00
  • PHP遍历目录实现方法介绍

    2023-05-25 06:31:41
  • 设计较好付款流程的12个建议

    2009-06-08 12:45:00
  • MySQL手动安装方法与中文解决方案

    2011-04-25 18:21:00
  • 从事设计行业的十年

    2008-04-01 09:44:00
  • 中国传统色彩名录

    2007-11-29 18:36:00
  • SQLServer与服务器连接时出错的解决方案

    2009-06-28 14:35:00
  • css学习笔记:表格隔行点击变色

    2009-04-30 13:15:00
  • css分页放大镜效果

    2008-11-02 15:35:00
  • SQL Server跟踪数据实现索引优化向导

    2009-02-13 17:14:00
  • ASP动态包含文件的改进方法

    2009-01-05 12:22:00
  • Asp截获后台登录密码的代码

    2012-12-04 20:20:38
  • 巧制可全屏拖动的图片

    2008-05-09 19:34:00
  • 获得MySQL改变字符集的方案

    2010-08-31 14:53:00
  • SQL触发器在保持数据库完整性中的实际应用

    2009-10-23 14:34:00
  • 是时候不用考虑基于字体大小(em)的设计了

    2009-10-24 13:25:00
  • 卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法

    2011-11-03 16:49:09
  • SQL Server中处理空值时涉及的三问题

    2009-01-20 11:24:00
  • Silverlight 3 Beta出来了

    2009-03-19 13:17:00
  • SQL语句删除2条重复数据一条保留一条

    2012-07-11 15:51:44
  • asp之家 网络编程 m.aspxhome.com