/seadragon

The Seadragon 2 JavaScript library for rendering high-resolution images, creating zoomable user interfaces (ZUIs), and Pivot

Primary LanguageJavaScriptOtherNOASSERTION

Seadragon Ajax v2

Seadragon Ajax (‘Seajax’) v2 is a JavaScript library for using deep zoom content (DZI and DZC files, as supported by Silverlight) in web pages, and for easily creating beautiful zooming interfaces. It introduces the Seadragon2.Image element and the accompanying <sdimg> tag, which mimics the <img> tag but references a deep zoom image or a particular element from a deep zoom collection. Seajax smoothly blends different resolution levels, and works in virtually every major browser. It automatically prioritizes network requests for image tiles that cover more area or are closer to the center of the screen. Seajax also provides a Viewer, which allows for fluid mouse-controlled panning and zooming of HTML or SVG content. Furthermore, the Viewer can be used to manipulate the coordinate space of a canvas element, or to control multiple kinds of content simultaneously (such as a canvas element with an HTML overlay).

This repository also contains code for creating a control that mimics the PivotViewer found in Silverlight, where a user can filter and sort a deep zoom collection. Collection data can come from a CXML file or be added dynamically on the client. For more info on setting up a page using this PivotViewer implementation, see PivotViewer Quickstart. Unlike the library portion, which aims to support every major browser, PivotViewer requires a browser with the <canvas> element, meaning IE8 and earlier are unsupported. A demo collection can be seen at http://seajax.github.io/.

As a historical note, most of this code was written in 2010 and was targeted at mouse interaction, so updates may be needed for newer browsers and touch interaction.

Prerequisites

You must be on Node.js version 10.15.3

Setup

First, install development tools using npm install.

  • Windows: To build all outputs, run Build/Scripts/seajax_v2.py using Python 2 or 3.

  • Mac OS X

    • Build all targets:

      make
    • Build a single target:

      make <target>
      
      # Examples
      make pivot
      make collegevine

The build script is currently set up to call ajaxmin for its minification step, but that could easily be swapped for another minifier if you prefer. After building, the bin/v2 directory will contain various files containing different subsets of the Seajax functionality. The most complete feature set (and therefore the biggest JavaScript file) is the pivot file. The zoom file has just the features needed for creating a pan & zoom container; the image file has features for loading and displaying DZC and DZI content, and the zoomimage file contains both. utils and ajax are more minimal builds containing various helper functions. You should only ever need one of these JavaScript files (no need to include both utils and pivot on your page, because the pivot build contains everything from utils, for example). No external libraries are needed.

Usage

Pivot

See the instructions in PivotViewer Quickstart.

Image

Add an <sdimg> element in your markup, or create it in code with one of the following:

var img = new Seadragon2.Image();
var img = document.createElement('sdimg');

Set its src property like you would with a normal <img>, but point it at deep zoom data:

img.src = 'someimage.dzi';
img.src = 'somecollection.dzc#5'; // note the hash indicates which item from the collection

Viewer

Make any element pan & zoom the content that it contains by creating a Viewer:

var viewer = new Seadragon2.Viewer(document.getElementById('myViewerDiv'), {
    viewportOptions: {
        maxZoom: 10,
        minZoom: 0.4,
        visibilityRatio: 0.5
    }
});

See the code comments in ./v2/src/zoomcontainer/Viewer.js for descriptions of all available viewportOptions, and to reference other methods that can be called on the Viewer object once it’s constructed.

Development

Lint

Lint the code using make lint.

Examples

Build files to view the following examples: