2009-12-20 139 views
1

我试图在内容滑块与此类似网站影响工作:MonitterjQuery的内容滑块

不像这个网站,我不希望包括任何实时Twitter更新。我只是希望div中的内容以类似的方式加载。

我已经看过具有垂直内容滑块的各种jquery插件,但没有一个似乎具有预期的效果。

最后,我不是在寻找完整的代码,只是一些小的帮助,以便我可以开始朝着正确的方向工作。

编辑:在连续div之间需要有一段时间延迟,以便用户可以浏览每个div中的内容。

编辑:我想我应该澄清一些代码示例这次。我不geeting对这些早期道歉:在jsondata.php文件

<?php 
    $json = '{ 
     "userdata": [ 
      { 
       "first":"James", 
       "last":"Watt", 
       "email":"[email protected]", 
       "city":"xyz" 
      }, 
      { 
       "first":"Isaac", 
       "last":"Newton", 
       "email":"[email protected]", 
       "city":"xyz" 
      }, 
      { 
       "first":"Albert", 
       "last":"Einstein", 
       "email":"[email protected]", 
       "city":"xyz" 
      } 
         ] 
        }'; 
       echo $json; 
?> 

继 这里的样本数据是的index.html文件

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
     <title>Untitled Document</title> 
     <link rel="stylesheet" type="text/css" href="style2.css" /> 
     <script type="text/javascript" src="lib/jquery/jquery-1.3.2.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function(){ 
       $("#loaduserdata").click(function(){ 
       $("#info").empty(); 
      $.getJSON(
      "jsondata.php", 
      function(data){ 
       $.each(data.userdata, function(i,user){ 
        var html = '<div class="entry">'; 
         html += "<p>"+user.first+"</p>"; 
         html += "<p>"+user.last+"</p>"; 
         html += "<p>"+user.email+"</p>"; 
         html += "<p>"+user.city+"</p>"; 
         html += '</div>'; 
        $(html).appendTo('#info'); 
       }); 
      }); 
    }); 

}); 
     </script> 
    </head> 
    <body> 
     <a href="#" id="loaduserdata">User Data</a> 
     <div id="info"></div> 
    </body> 
</html> 

现在,点击用户数据将通过类输入快速填充div中的所有数据。我正在寻找的是以类似于monitter网站的风格填充数据,也就是说,数据应该在一段时间内缓慢填充。 这是一些示例代码。如果我走错了方向,请纠正我。

+0

你看看jQuery UI的? – kiamlaluno 2009-12-20 07:20:52

+0

你好,我已经看过它了。我仍在使用它,但目前尚无法取得预期的结果。 – 2009-12-20 08:02:55

回答

2

这就是我要做的(demo here)...实际的代码包含在addRow函数中。我在内容中添加了一个简单的“插入日期”,您可以使用ajax来检索任何内容。

其余的代码是为了演示的目的,主要是因为我不喜欢div的屏幕出现,所以我添加了每列div的最大数量。

CSS

#wrapper { position: relative; left: 0; top: 0; width: 600px; margin: 0 auto; text-align: center; } 
.column { position: relative; float: left; padding: 0; width: 50%; } 
.column div { background: #eee; border: #333 1px solid; margin: 5px; padding: 5px; } 
.column .top { background: #ccc; } 
.newrow { display: none; } 

HTML

<input type="button" rel="col1" style="margin: 5px; float: right;" value="Add row to right" /> 
<input type="button" rel="col0" style="margin: 5px; float: right;" value="Add row to left" /> 
<input type="button" rel="both" style="margin: 5px; float: right;" value="Add row to both" /> 

<div id="wrapper"> 
<div id="col0" class="column"><div class="top">Content added below</div></div> 
<div id="col1" class="column"><div class="top">Content added below</div></div> 
</div> 

脚本

$(document).ready(function(){ 
var maxRows = 10; 
$(':button').click(function(){ 
    var el = $(this).attr('rel'); 
    if (el=="both") { el="col1"; addRow("col0"); } 
    addRow(el); 
    // remove extra rows 
    $('#wrapper').find('.column').each(function(){ 
    $(this).find('.row:gt(' + maxRows + ')').remove(); 
    }) 
}); 
}) 

function addRow(el){ 
// get whatever contents here 
var content = (new Date).toString(); 
// add new row 
$('#'+el).find('.top').after('<div class="newrow row">' + content + '</div>') 
$('.newrow').fadeIn('slow',function(){ $(this).removeClass('newrow') }); 
} 

更新:好吧,我看你也没问的代码,但是我在这一点一起......它应该更符合你想要的东西。

假设这JSON结构:

({ 
"news": [ 
    { "id" : "0010", "date" : "Sun Dec 20 2009 12:10:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 10" }, 
    { "id" : "0009", "date" : "Sun Dec 20 2009 12:09:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 9" }, 
    { "id" : "0008", "date" : "Sun Dec 20 2009 12:08:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 8" }, 
    { "id" : "0007", "date" : "Sun Dec 20 2009 12:07:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 7" }, 
    { "id" : "0006", "date" : "Sun Dec 20 2009 12:06:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 6" }, 
    { "id" : "0005", "date" : "Sun Dec 20 2009 12:05:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 5" }, 
    { "id" : "0004", "date" : "Sun Dec 20 2009 12:04:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 4" }, 
    { "id" : "0003", "date" : "Sun Dec 20 2009 12:03:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 3" }, 
    { "id" : "0002", "date" : "Sun Dec 20 2009 12:02:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 2" }, 
    { "id" : "0001", "date" : "Sun Dec 19 2009 12:01:00 GMT-0500 (Eastern Standard Time)", "title" : "News item 1" } 
] 
}) 

CSS(同前)

HTML

<div id="wrapper"> 
<div class="column"><div class="top">Content added below</div></div> 
</div> 

脚本

$(document).ready(function(){ 
initData(); 
}) 

function initData(){ 
var o = { 
    maxRows: 10, // max # of rows to show 
    updateJSON : 15, // update data every 30 seconds 
    updateScreen : 1, // update screen every 2 seconds with data 

    count: 0, // count # of cycles of setTimeout 
    lastID: -1, // last news ID 
    debug: false // debug 
}; 
var cycle; 
if (o.debug) $('#wrapper').prepend('<div id="debug"></div>') 
getData([]); 

function addRow(content){ 
    // update data if this function has cycled 30/2 times - so we only use one settimeout function 
    o.count++; 
    if (o.debug) $('#debug').html('seconds passed = ' + o.count*o.updateScreen + ', content.length = ' + content.length); 
    if (o.count >= o.updateJSON/o.updateScreen) { 
    o.count = 0; 
    getData(content); 
    } 

    if (content.length > 0) { 
    // remove last array element 
    var n = content.pop(); 
    // if content length is zero, the set last ID 
    if (content.length === 0) o.lastID = n[0]; 
    // add new row, rel contains the id - not used by the script, but there if you need it. 
    $('#wrapper').find('.top').after('<div class="newrow row" rel="' + n[0] + '">' + n[2] + '<br />' + n[1] + '</div>'); 
    $('.newrow').fadeIn('slow', function(){ $(this).removeClass('newrow') }); 
    } 
    $('#wrapper').find('.row:gt(' + (o.maxRows-1) + ')').remove(); 
    cycle = setTimeout(function(){ addRow(content) } , o.updateScreen * 1000); 
} 

function getData(content){ 
    var tmparray = []; 
    var lastIDfound = false; 
    $.ajax({ 
    type: "GET", 
    url: "newsitems.js", 
    dataType: "json", 
    success: function(data) { 
    $.each(data.news, function(news){ 
    if (this.id == o.lastID) lastIDfound = true; 
    if (!lastIDfound){ 
    // return month day year time (assuming US notation) 
     var newsDate = this.date.split(' ').slice(1,5); 
     // get today's month day year 
     var today = new Date().toString().split(' ').slice(1,4).join(' '); 
     // show only the time if the date is today 
     var newsTime = (newsDate.slice(0,3).join(' ') == today) ? 'posted at ' + newsDate[3] : 'from ' + newsDate.join(' '); 
     tmparray.push([ this.id, newsTime, this.title ]); 
    } 
    }); 
    // if tmparray length is zero, then return 
    if (tmparray.length === 0) return; 
    // if last item shown hasn't changed, then return with no new data 
    if (tmparray[0][0] == o.lastID) return; 
    // set last ID 
    if (o.lastID == -1) o.lastID = tmparray[0][0]; 
    clearTimeout(cycle); 
    if (content.length === 0) { 
    addRow(tmparray); 
    } else { 
    addRow(content.concat(tmparray)); 
    } 
    }, 
    error: function(XMLHttpRequest, textStatus, errorThrown) { 
    if (!$('#error').length) $("#wrapper").prepend('<div id="error"></div>'); 
    $('#error').html(errorThrown + '<br />'); 
    } 
    }) 
} 
} 
+0

我想我必须对此进行修改,因为内容仅在点击按钮时才添加。我实际上在寻找类似于monitter网站的自动化内容添加。 – 2009-12-20 10:44:25

+0

嗯,我不知道你是如何得到你的数据。你还想要添加更多列的能力吗? – Mottie 2009-12-20 10:54:21

+0

多级json数据 – 2009-12-20 11:36:38

0

我打算假设您正在使用AJAX加载数据(通过AJAX获得新DIV的内容)。 然后,你可以做这样的事情:

编辑:根据您的评论,你可以使用这样的事情。我没有测试的代码,但逻辑是存在的(只是希望我没有摆乌龙:)):

var lastAddedTime = null; 

function addNewDiv (response) { 
    var timeNow = new Date().getTime(); 
    if (lastAdded === null || (timeNow - lastAddedTime) > 5000) { 
     // depending on what response is build your DIV 
     // it could be HTML or JSON from which you generate HTML 
     var newDiv = $(response); 
     newDiv.css ('display', 'none'); 

     newDiv.prependTo ($('selector for your container')); 
     newDiv.fadeIn ('slow'); 
     lastAddedTime = timeNow; 
    } else { 
     setTimeout (function() { addNewDiv (response); }, 5001); 
    } 
} 

$.get (
    'get_data.php', 
    { 
     // your parameters 
    }, 
    function (response) { 
     addNewDiv (response); 
    } 
); 

5000毫秒为5秒,调整,如果您想更新

较短的时间间隔
+0

该方法将快速填充所有数据。如果我想在两个div之间有时间延迟,以便用户可以浏览每个div的内容,该怎么办? – 2009-12-20 11:50:57