by Ian Li
Infinite Drag is a jQuery plugin that helps you create an infinite wall interface. As you drag the wall in a viewport, previously occluded tiles are created. You can hook onto events to generate custom tiles.
Requires the Javascript libraries: jQuery and jQuery UI.
or visit the GitHub project page.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.1/jquery-ui.min.js"></script> <script type="text/javascript" src="jquery.infinitedrag.js"></script>
<div id="viewport"> <div id="wall"></div> </div> <script type="text/javascript"> // #wall is the infinite wall. // The wall is made of tiles 100px wide and 100px high. var infinitedrag = jQuery.infinitedrag("#wall", {}, { width: 100, height: 100, start_col: 0, start_row: 0 }); </script>
Creates a jQuery Infinite Drag widget.
string
object
string
number
number
number
number
function
The tile_options.oncreate function accepts three arguments:
object
the created tile as a jQuery objectnumber
column location of the tilenumber
row location of the tile// Creates a wall. Each tile is 100px wide and 100px high. // The tile at (0,0) appears at the top left corner of the viewport. var wall = jQuery.infinitedrag("#wall"); // Each tile is 300px wide and 200px high. // The tile at (5, 7) appears at the top left corner of the viewport. var wall = jQuery.infinitedrag("#wall", {}, { width: 300, height: 200, start_col: 5, start_row: 7 }); // The oncreate function is called every time a tile is created. var wall = jQuery.infinitedrag("#wall", {}, { oncreate: function($element, col, row) { $element.text(col + " x " + row + " = " + (col * row)); } });
Returns the wall element.
var element = wall.draggable();
Gets or sets whether the wall can be dragged.
boolean
// Returns whether the wall can be dragged. var disabled = wall.disabled(); // Disables dragging of the wall. wall.disabled(true); // Enables dragging of the wall. wall.disabled(false);
Centers the tile at (column, row) in the viewport.
number
number
// Centers the tile at (9, 0) in the viewport. wall.center(9, 0);
<style type="text/css"> #demo1_viewport { overflow:hidden; /* Occlude elements outside viewport! */ background-color:#000; width:260px; height:260px; background-color:#ffe3f3; border:1px solid #ff94c9; } #demo1_wall { /* Default settings by code: * position: relative; * cursor: move; */ } #demo1_wall ._tile { /* Default settings by code: * position: absolute, * left: [auto], * top: [auto], * width: [set by constructor], * height: [set by constructor], * overflow: hidden */ font-size:36px; font-weight:bold; color:#000; } </style> <div id="demo1_viewport"> <div id="demo1_wall"></div> </div>
Double-click tile to edit.
<style type="text/css"> #demo2_viewport { overflow:hidden; background-color:#000; width:260px; height:260px; color:#fff; border:1px solid #ccc; background-color:#000; } #demo2_wall { } #demo2_wall ._tile { font-size:18px; font-weight:bold; } #demo2_wall ._tile:hover { background-color:#333; } #demo2_wall ._tile ._content { margin:0; padding:10px; width:180px; height:130px; text-align:center; } #demo2_wall ._tile ._content input { width:170px; border:1px solid #ff94c9; } </style> <div id="demo2_viewport"> <div id="demo2_wall"></div> </div> <p> Double-click tile to edit. </p>
<script type="text/javascript"> $(document).ready(function() { var edit = function($element) { // Create the text input. var text = $element.text(); $input = $('<input type="text" />').val(text); // Create the from. $editor = $("<form></form>"). append($input). appendTo($element.empty()); // Focus on the input. $input.focus(); var save = function () { var val = $editor.children("input").val(); $element.html(val); return false; } $input.blur(save); $editor.submit(save); }; var tile_options = { width: 200, height: 150, start_col: 13, start_row: 11, oncreate: function($element, col, row) { $('<div class="_content"></div>'). text(col + "," + row). appendTo($element). dblclick(function(e) { edit($(this)); }); } }; jQuery.infinitedrag("#demo2_wall", {}, tile_options); }); </script>
<style type="text/css"> #demo3_viewport { overflow:hidden; background-color:#000; width:260px; height:260px; color:#fff; border:1px solid #ccc; background-color:#000; } #demo3_wall { } #demo3_wall ._tile { font-size:18px; font-weight:bold; } </style> <div id="demo3_viewport"> <div id="demo3_wall"></div> </div>
<script type="text/javascript"> $(document).ready(function() { jQuery.infinitedrag("#demo3_wall", { axis: "x" }, // "y" for vertical drag. { height: 260, // same height as viewport. range_col: [0, 100000] } ); }); </script>