1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chenjianlong-JRoll2

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Официальный сайт: http://www.chjtx.com/JRoll/

JRoll

My English is very poor, but this doesn't affect my desire to communicate with the world, thank you for the help of Google Translate

Дополнительная информация в видео: JRoll сборка [закрыв глаза]
Скачать презентацию к видео: JRoll视频.pptx

Предварительный просмотр Preview

Используйте телефон для сканирования QR-кода для просмотра примера

http://www.chjtx.com/JRoll/demos/

Обратите внимание: JRoll является независимым плагином, который не требует зависимости от каких-либо сторонних библиотек. В демонстрационном коде используется библиотека FastClick для показа совместимости JRoll с FastClick. При использовании IScroll5 с параметром click:true на iOS устройствах вместе с FastClick возникают проблемы с событиями кликов, которые требуют двойного нажатия для активации. Это проблема отсутствует при использовании JRoll.

Notice: JRoll does not require reliance on any third-party libraries.

Запуск демонстраций Run Demos

# Клонировать репозиторий Clone repository
git clone https://github.com/chjtx/JRoll.git

# Перейти в проект Go into project
cd JRoll

# Установить express Install express
npm install -g express

# Если используете Mac, потребуется sudo
# If on mac, use sudo
sudo npm install -g express
```# Запустить запуск
node server.js

Затем откройте localhost:3020/demos/ в браузере

А затем откройте localhost:3020/demos/ в браузере

Обзор

Описание

JRoll — это легкий плагин для прокрутки HTML5, который может обрабатывать десятки тысяч данных, имеет функции ускоренной прокрутки, отскока, масштабирования, полосы прокрутки и событий прокрутки. Он совместим со спецификациями модулей CommonJS/AMD/CMD, открытый и бесплатный.

Вторая версия JRoll была переписана на основе первой версии, используя алгоритм прокрутки, основанный на движении во времени, что решает проблему замедленной прокрутки при снижении частоты кадров. Также были изменены методы проверки направлений движения, что позволяет более точно и чувствительно определять горизонтальное и вертикальное направление.

Во второй версии JRoll некоторые API были изменены, поэтому она не полностью совместима с первой версией JRoll. JRoll второго издания основан на первой версии JRoll, перезаписи алгоритма прокрутки, основывающейся на временной перемещаемости, чтобы решить проблему медленной скорости прокрутки, изменения в горизонтальном и вертикальном направлении для более точного и чувствительного определения направления захвата.

JRoll второе издание добавляет некоторые API, которые не полностью совместимы с первой версией JRoll.### Совместимость

  • iOS 6+
  • Android 4.0+
  • Chrome
  • Firefox
  • IE 9+

Обратите внимание: JRoll специально разработан для мобильных приложений, совместимость с браузерами ПК предназначена только для удобства разработки и отладки, поэтому рекомендуется использовать Google Chrome Simulator для разработки, а также использовать его на мобильных устройствах.

Примечание: Чтобы сделать этот плагин легким, JRoll совместим с браузерами ПК только для удобства разработки и отладки, поэтому настоятельно рекомендуется использовать Google Chrome Simulator для разработки, пожалуйста, используйте его на мобильных устройствах.

На UC Browser работает плохо, автор уже определил UC Browser как информационное приложение, а не профессиональный браузер, поэтому специальной совместимости с ним нет.

Нет специальной совместимости со старыми браузерами

Введение

npm

npm install jroll --save

Обычное введение

<script src="jroll"></script>

Введение согласно CommonJS

var JRoll = require('jroll');

Введение согласно AMD (requireJS)

require(['jroll'], function(JRoll) {
    ...
});

Введение согласно CMD (seaJS)

seajs.use('jroll', function(JRoll) {
    ...
});
```### Пример простого использования Simple example
```html
<!-- HTML код -->
<div id="wrapper">
    <ul id="scroller">
        <li>Есть прекрасная девушка, видеть которую невозможно забыть.</li>
        <li>Один день без неё, и сердце начинает трепетать.</li>
        <li>Феникс летает высоко, ищет свою пару по всем морям.</li>
        <li>Но она не находится за стеной.</li>
        <li>Играю на лютне, чтобы выразить свои чувства.</li>
        <li>Когда же ты придешь, чтобы успокоить мои тревоги?</li>
        <li>Желаю разделить судьбу с тобой, взять тебя за руку.</li>
        <li>Не имея возможности летать вместе, мы оба погружаемся в печаль.</li>
    </ul>
</div>
```<!-- CSS код -->
<style>
ul {margin: 0; padding: 0;}
li {line-height: 24px; margin-left: 24px;}
# wrapper {width: 200px; height: 100px; border: 1px solid;}
</style>

<!-- JavaScript код -->
<script>
new JRoll("#wrapper");
</script>
```## Использование

### Как использовать

```js
var jroll = new JRoll(селектор [, опции]);

селектор — это контейнер, который может быть строкой выборки по ID #обертка, либо объектом DOM document.getElementById('обертка'). Второй аргумент — это опциональный объект, который определяет, как будет создан экземпляр JRoll.

Пример: Создание экземпляра с вертикальной полосой прокрутки

var jroll = new JRoll("#обертка", {scrollBarY: true});

После создания объекта JRoll можно динамически изменять некоторые опциональные параметры.

Пример: Отключение отскока

jroll.options.bounce = false;

Опциональные параметры

:white_check_mark: Обозначает возможность динамического изменения:white_check_mark: Индикатор возможности динамического изменения|Допустимое значение Key |Значение по умолчанию Default Value |Описание Description | |----------------------|-------------------------------|-----------------------| |id |[Случайно сгенерировано]
[Randomly generated] |id, уникальный маркер экземпляра JRoll, рекомендуется вручную указывать id для удобства доступа к конкретному объекту JRoll в глобальном JRoll.jrollMap, если не указан, система автоматически создаст его.
Id, уникальный идентификатор экземпляра JRoll, рекомендуется вручную указывать id для удобства доступа к конкретному объекту JRoll в глобальном JRoll.jrollMap, если не указан, система автоматически создаст его. | |scrollX |false |Активировать горизонтальное прокручивание :white_check_mark:
Включить горизонтальное прокручивание | |scrollY |true |Активировать вертикальное прокручивание :white_check_mark:
Включить вертикальное прокручивание | |scrollFree |false |Активировать свободное прокручивание, по умолчанию при горизонтальном прокручивании вертикальное прокручивание отключено и наоборот, если используется для масштабирования изображения, можно установить этот параметр как true :white_check_mark:
По умолчанию, когда происходит горизонтальное прокручивание, вертикальное прокручивание отключается и наоборот. Если используется масштабирование изображения, можно установить этот параметр как true ||minX |0 |Граница прокрутки влево :heavy_check_mark:
Граница прокрутки вправо| |maxX |[Отрицательная ширина scroller]
[-scroller's width] |Граница прокрутки вправо :heavy_check_mark:
Граница прокрутки влево| |minY |0 |Граница прокрутки вниз :heavy_check_mark:
Граница прокрутки вверх| |maxY |[Отрицательная высота scroller]
[-scroller's height] |Граница прокрутки вверх :heavy_check_mark:
Граница прокрутки вниз| |zoom |false |Активировать масштабирование :heavy_check_mark:
Включить масштабирование| |zoomMin |1.0 |Минимальный коэффициент масштабирования :heavy_check_mark:
Минимальный коэффициент масштабирования| |zoomMax |4.0 |Максимальный коэффициент масштабирования :heavy_check_mark:
Максимальный коэффициент масштабирования| |bounce |true |Разрешить отскок :heavy_check_mark:
Разрешить отскок| |scrollBarX |false |Открыть горизонтальный ползунок, ползунок появляется, когда страница прокручивается более чем на два широких экрана
Открыть горизонтальный ползунок| |scrollBarY |false |Открыть вертикальный ползунок, ползунок появляется, когда страница прокручивается более чем на два узких экрана
Открыть вертикальный ползунок| |scrollBarFade |false |Ползунок использует режим плавного затухания
Ползунок использует режим плавного затухания| |preventDefault |true |Запрещает дефолтное событие touchmove
Запрещает дефолтное событие touchmove | |momentum |true |Открывает ускоренную прокрутку и инерционный переход :white_check_mark:
Открывает ускоренную прокрутку и инерционный переход || |autoStyle |true |Автоматически добавляет стили к wrapper и scroller| |autoBlur |true |Добавлено в версии v2.4.3, автоматически отключает фокус input/textarea при прокрутке, чтобы скрыть клавиатуру. Установка значения false может вызвать проблему с появлением курсора, который не следует за полем ввода на iOS| | adjustTop |190 |С JRoll версии v2.2.0 опция adjustTop удалена, функционал автоматической корректировки позиции поля ввода на Android перемещён в jroll-fixedinput.js. На устройствах с Android при появлении клавиатуры происходит автоматическая корректировка положения поля ввода. Автор не рекомендует использовать эту опцию; если клавиатура закрывает поле ввода, лучше переработать страницу формы. Пример: Как решить проблему с закрытым полем ввода клавиатурой?| |scroller |[первый дочерний элемент wrapper]
[Wrapper's first child element]|Указывает scroller, значение нельзя менять динамически, можно указывать строку выбора id #scroller, либо объект DOM document.getElementById('scroller')
Specifies scroller, cannot be dynamically changed, can be an ID selector string #scroller, or a DOM object document.getElementById('scroller')| |edgeRelease |true |Добавлено в версии v2.4.|7, позволяет автоматически завершать прокрутку при достижении границ экрана сверху и снизу, что решает проблему с отсутствием события touchEnd при выведении пальца за пределы экрана. Если скорость движения пальца слишком высока, данная опция может не работать должным образом.

|### Атрибуты Attributes|- id, уникальный идентификатор экземпляра JRoll.

  • id -> уникальный идентификатор экземпляров JRoll.
var jroll = new JRoll("#wrapper");
console.log(jroll.id);
  • jrollMap, объект, коллекция экземпляров JRoll, хранящая все экземпляры JRoll текущей страницы.
  • jrollMap -> объект, коллекция экземпляров JRoll, содержащая все экземпляры JRoll текущей страницы.
console.log(JRoll.jrollMap);

Методы Methods

:link: Обозначает поддержку цепочечного вызова

:link: Indicates support for chaining calls

refresh :link:

Метод используется для обновления экземпляра JRoll при изменении высоты скроллера или обертки.

This method is used to refresh a JRoll instance when the height of the scroll area or wrapper changes.

var jroll = new JRoll("#wrapper");
// do something, e.g., dynamically modify the content of the scroll area so its height changes
jroll.refresh();

scrollTo :link:

Этот метод используется для перемещения скроллера. Он принимает пять параметров: первый — смещение по оси X (обязательный), второй — смещение по оси Y (обязательный), третий — время анимации (необязательный, в миллисекундах), четвертый — возможность выхода за границы (необязательный, true/false), пятый — обратный вызов. Чтобы получить текущие значения смещения по X и Y, можно вывести jroll.x и jroll.y.

jroll.scrollTo(x, y, duration, outOfBounds, callback);
```Этот метод используется для перемещения области прокрутки. Он принимает пять параметров: первый — смещение по оси X (обязательный), второй — смещение по оси Y (обязательный), третий — длительность анимации (необязательный, в миллисекундах), четвертый — возможность выхода за границы (необязательный, true/false), и пятый — обратный вызов. Чтобы получить текущие значения смещений по оси X и Y, можно распечатать `jroll.x` и `jroll.y`.```js
jroll.scrollTo(x, y [, duration , bool, callback])
var jroll = new JRoll("#wrapper");

// Переместиться в позицию 0px, -100px за 200 миллисекунд
jroll.scrollTo(0, -100, 200);

// Разрешить движение за границы
jroll.scrollTo(100, 100, 0, true);

// Обратный вызов
jroll.scrollTo(0, 100, 400, false, function() {
    // Выполнить после окончания прокрутки
});

scrollToElement :link:

jroll.scrollToElement(selector[, duration , bool, callback])

Переместить до указанного элемента. Первый параметр — это строка или DOM-элемент (обязательный параметр и должен быть дочерним элементом scroller), второй параметр — время (необязательный параметр), третий параметр — разрешение выхода за границы (необязательный параметр, true/false), четвертый параметр — обратный вызов метода (необязательный параметр).

var jroll = new JRoll("#wrapper");
jroll.scrollToElement("#el", 300, false, function () { ... });

enable :link:

Активировать скролл, использовать disable для деактивации скролла после чего можно снова активировать с помощью этого метода.

Enable scrolling, use disable to disable scrolling and then you can reactivate with this method.

jroll.enable();

disable :link:

Отключает возможность скролла.

Disables scrolling.

jroll.disable();

destroy

Уничтожает объект jroll.

Destroys the jroll object.

jroll.destroy();

scale :link:

Масштабирование, принимает один целочисленный/дробный параметр.

Scaling accepts one integer/floating point parameter.

// Увеличение в 1.5 раза
jroll.scale(1.5);

callПозволяет передать управление другому объекту при прокрутке. Возвращает объект, которому было передано управление. Подходит для вложенного скроллинга, когда внутренний скролл достигает конца и начинается внешний скролл.Разрешает передачу управления другому объекту во время прокрутки. Возвращает объект, которому было передано управление. Подходит для вложенной прокрутки, где внутренняя прокрутка достигает конца и запускает внешнюю прокрутку.

/* Пример:
 * jroll1 - внешний слой, содержащий jroll2
 * Когда jroll2 достигает определённой позиции, он передаёт управление jroll1
 */
/* Example:
 * Jroll1 - outer layer containing jroll2
 * When jroll2 reaches a certain position, it transfers control to jroll1
 */
var pos;
var jroll1 = new JRoll("#wrapper", {bounce: true});
var jroll2 = new JRoll("#inner", {bounce: true});
jroll2.on("scrollStart", function() {
    pos = this.y;
});
jroll2.on("scroll", function(e) {
    if ((this.y - pos > 0 && pos === 0) || (this.y - pos < 0 && pos === this.maxScrollY)) {
        // Передача управления jroll1
        jroll2.call(jroll1, e);
    }
});

События Events

JRoll предоставляет восемь событий, каждый из которых может иметь несколько действий. "this" внутри события указывает на объект jroll.

JRoll provides a total of eight events, each of which can have several actions. "this" inside the event refers to the jroll instance.

scrollStart

Срабатывает при начале прокрутки

jroll.on("scrollStart", function() {
    // выводит текущее смещение по оси X, this указывает на объект jroll
    console.log(this.x);
});

scroll

Срабатывает во время прокрутки

jroll.on("scroll", function() {
    // делай что хочешь...
});

scrollEnd

Срабатывает в конце прокрутки

jroll.on("scrollEnd", function() {
    // делай что хочешь...
});

touchEnd

Срабатывает при отпускании пальца пользователя, после события начала прокрутки, но до события окончания прокрутки```js jroll.on("touchEnd", function() { // сделай что хочешь... });


#### zoomStart

Выполняется при начале масштабирования

```js
jroll.on("zoomStart", function() {
    // сделай что хочешь...
});

zoom

Выполняется во время масштабирования

jroll.on("zoom", function() {
    // сделай что хочешь...
});

zoomEnd

Выполняется после завершения масштабирования

jroll.on("zoomEnd", function() {
    // сделай что хочешь...
});

refresh

Используйте jroll.refresh() для обновления реализации

jroll.on("refresh", function() {
    // сделай что хочешь...
});

Продвинутый уровень Advanced

Получение экземпляра JRoll с помощью атрибута jroll Use the attribute jroll to get the JRoll instance

У каждого скроллера есть индекс, указывающий на его собственный экземпляр jroll

<div id="w">
  <div id="s"></div>
</div>
<script>
var jroll = new JRoll('#w');
document.getElementById('s').jroll === jroll; // true
</script>

Определение текущего состояния прокрутки с помощью this.s Use this.s to determine the current scrolling state

var jroll = new JRoll("#wrapper");
jroll.on("scroll", function() {
    if (this.s === "scrollY") {
        // сделай что хочешь...
    } else {
        // или сделай что-то другое...
    }
})

jroll.s представляет состояние, и шесть возможных значений:

  1. null — начальное состояние, без каких-либо операций скроллинга
  2. preScroll — готовность к началу скроллинга
  3. preZoom — готовность к началу масштабирования
  4. scrollX — скроллинг в горизонтальном направлении
  5. scrollY — скроллинг в вертикальном направлении
  6. scrollFree — скроллинг в обоих направлениях> Примечание: В версиях JRoll до v2.3.0 сжатый файл минифицированного кода использует значения 1, 2, 3, 4, 5 для представления состояний preScroll, preZoom, scrollX, scrollY, scrollFree. С версии JRoll v2.3.0 и выше используется единая система значений, как в незаминифицированной версии. Начальный выбор использования цифрового представления для экономии места был ошибочным.

Определение достижения конца скроллинга

var jroll = JRoll("#wrapper");
jroll.on("scrollEnd", function() {
    if (this.y === this.maxScrollY) {
        console.log("Вы достигли нижней границы.");
    }
});

Дополнительные свойства объекта jroll можно найти в консоли браузера.

Настройка внешнего вида полосы прокрутки

Если значение scrollBarX или scrollBarY является строкой, то это указывает на активацию пользовательской настройки полосы прокрутки, требующей самостоятельного оформления стилей.

Полоса прокрутки имеет некоторые специфические требования к стилизации. При создании пользовательского дизайна размера и цвета полосы прокрутки следует сначала скопировать базовый стиль, а затем отредактировать .jroll-ybar / .jroll-xbar и .jroll-ybtn / .jroll-xbtn.

var jroll = new JRoll("#wrapper", {
        scrollBarY: "custom",
        scrollBarFade: true
    });

Устранение проблемы прокрутки видео в некоторых устройствах AndroidЕсли ваша страница требует воспроизведение видео, а в некоторых устройствах Android невозможно свайпнуть элемент <video> в состоянии покоя, вы можете использовать следующие методы для решения этой проблемы.Непроигрываемое состояние <video> похоже на контролы, которые не могут захватывать события типа touchstart, поэтому использование JRoll для прокрутки невозможно. Эту проблему можно решить с помощью прозрачного div.

<div id="parent">
    <video id="video" controls="controls">
        <source src="./video.ogg" type="video/ogg">
    </video>
    <div class="fixed-video-scroll"></div>
</div>
<script>
var video = document.getElementById("video");
document.addEventListener("click", function(e) {
    if (e.target.className === "fixed-video-scroll") {
        if (video.paused) {
            video.play();
        } else {
            video.pause();
        }
    }
});
</script>
  1. Установите #parent как относительно позиционируемый элемент, ширина video должна быть 100%, высота может автоматически рассчитываться или быть рассчитана самостоятельно.
  2. div.fixed-video-scroll должен иметь абсолютное позиционирование, чтобы закрыть video. Высота должна быть равной высоте video минус 44px, чтобы гарантировать, что контролы не будут скрыты.
  3. Добавьте событие, которое при клике на div.fixed-video-scroll будет запускать воспроизведение или приостанавливать его.

О проблемах с блокированием полей ввода клавиатуройФункция, которая позволяет полю ввода комментариев перемещаться наверх вместе с появлением клавиатуры, кажется очень популярной среди клиентов. Однако реализация этого требования с использованием технологий H5 является сложной задачей, поскольку фиксированное позиционирование не работает, а третьи сторонние клавиатуры не меняют высоту окна, что приводит к тому, что поля ввода остаются скрытыми. Кроме того, iOS автоматически перемещает поля ввода в неверное положение и так далее. Эти проблемы являются самыми большими препятствиями. На данный момент наиболее реалистичные решения включают:


Также исправлены знаки препинания и пунктуация для обеспечения правильного смысла и грамматики.1. При нажатии на комментарий отображается плавающее окно, чтобы поле ввода располагалось в верхней части экрана. 2. Переключение на новую страницу для выполнения операций ввода.

Эти два варианта дизайна умело избегают ситуации, когда поле ввода скрывается под клавиатурой. Подробнее можно узнать из этой статьи Как избежать скрытия ввода под клавиатурой в WebAPP?.

JRoll использует translate3d для прокрутки страницы, слушает события фокусировки поля ввода, применяет метод scrollTo для перемещения поля ввода в видимую область и таким образом решает проблему его закрытия на Android. Подробнее см. компонент jroll-fixedinput.

Устройства iOS автоматически корректируют положение поля ввода, хотя иногда это положение не то, что нам требуется. К сожалению, пока нет способа запретить автоматическое перемещение поля ввода в iOS при использовании H5.

Отдельное спасибо

Special thanks

Вдохновением для JRoll послужил iScroll iScroll

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

JRoll — это лёгкий HTML5-плагин с открытым исходным кодом, который может катить свыше 10 тысяч строк данных. Он поддерживает функции скольжения с ускорением и отскоком, масштабирования, имеет полосу прокрутки и обрабатывает события скольжения. Также он совместим с CommonJS/AMD/CMD модульными спецификациями. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/chenjianlong-JRoll2.git
git@api.gitlife.ru:oschina-mirror/chenjianlong-JRoll2.git
oschina-mirror
chenjianlong-JRoll2
chenjianlong-JRoll2
master