Agent-readable demo data

Title
Scrolling (JavaScript Scheduler) | DayPilot Pro for JavaScript Demo
Tree
DayPilot JavaScript Demo
Catalog root
Default
Description
You can use the Scheduler API to scroll programmatically. Read more about the JavaScript scheduler.

Inline demo script 1

const dp = new DayPilot.Scheduler("dp", {
            startDate: "2026-01-01",
            days: 366,
            scale: "Day",
            timeHeaders: [
                {groupBy: "Month", format: "MMMM yyyy"},
                {groupBy: "Cell", format: "d"}
            ],
            heightSpec: "Max",
            height: 300,
            treeEnabled: true,
            resources: [
                {name: "Room A", id: "A"},
                {name: "Room B", id: "B"},
                {name: "Room C", id: "C"},
                {name: "Room D", id: "D"},
                {name: "Room E", id: "E"},
                {name: "Room F", id: "F"},
                {name: "Room G", id: "G"},
                {name: "Room H", id: "H"},
                {name: "Room I", id: "I"},
                {name: "Room J", id: "J"},
                {name: "Room K", id: "K"}
            ],
            scrollStep: 20,
            onTimeRangeSelected: args => {
                const name = window.prompt("New event name:", "Event");
                dp.clearSelection();
                if (!name) return;
                const e = new DayPilot.Event({
                    start: args.start,
                    end: args.end,
                    id: DayPilot.guid(),
                    resource: args.resource,
                    text: name
                });
                dp.events.add(e);
                dp.message("Created");
            }
        });
        dp.init();
        dp.scrollTo("2026-03-25");

        const app = {
            elements: {
                start: document.querySelector("#start"),
                now: document.querySelector("#now"),
                end: document.querySelector("#end"),
                animated: document.querySelector("#animated"),
                target: document.querySelector("#target")
            },
            init() {
                this.loadEventData();
                this.addEventHandlers();
            },
            loadEventData() {
                const events = [];

                for (let i = 0; i < 15; i++) {
                    const duration = Math.floor(Math.random() * 6) + 1; // 1 to 6
                    const durationDays = Math.floor(Math.random() * 6); // 0 to 5
                    const start = Math.floor(Math.random() * 6) + 2; // 2 to 7
                    const res = Math.floor(Math.random() * 6); // 0 to 5

                    const event = {
                        start: new DayPilot.Date("2026-03-25T00:00:00").addDays(start),
                        end: new DayPilot.Date("2026-03-25T12:00:00").addDays(start).addDays(durationDays).addHours(duration),
                        id: DayPilot.guid(),
                        resource: String.fromCharCode(65 + i),
                        text: "Event"
                    };

                    events.push(event);
                }
                dp.update({events});
            },
            addEventHandlers() {
                this.elements.start.addEventListener("click", (ev) => {
                    ev.preventDefault();
                    dp.scrollTo("2026-01-01", app.animated, app.target);
                });
                this.elements.now.addEventListener("click", (ev) => {
                    ev.preventDefault();
                    dp.scrollTo(DayPilot.Date.now(), app.animated, app.target);
                });
                this.elements.end.addEventListener("click", (ev) => {
                    ev.preventDefault();
                    dp.scrollTo("2026-12-31", app.animated, app.target);
                });
            },
            get animated() {
                return this.elements.animated.value === "true";
            },
            get target() {
                return this.elements.target.value;
            }
        };
        app.init();