Добавление / удаление слайдов из Reveal.На JS динамически
можно ли добавлять / удалять слайды во время презентации с помощью reveal.Яш? Если быть точным, есть ли API для этого или, может быть, какой-то грязный обходной путь?
3 ответов
мне было любопытно об этом, а также для предстоящего проекта; осмотрелся и ничего не смог найти, поэтому я написал что-то для своего собственного проекта, приложенного в конце. Добавление слайда после текущего слайда довольно просто. Просто добавьте элемент раздела в '.слайды", и убедитесь, что раздел имеет класс "будущее". Кроме того, если вы находитесь на последнем слайде, вам нужно добавить класс "включено " в".навигация-вправо". Добавление чего-то до того, как текущий слайд испортит нумерацию, поэтому вы нужно добавить его с классом "прошлое", а затем перейти к следующему слайду.
то же самое будет для удаления слайда, если вы удалите '.мимо слайда, это портит вашу нумерацию. Я еще не тестировал свой код (пока), поэтому, если вы используете его как тест.
Reveal.addEventListener( 'ready', function( event ) {
Reveal.add = function( content = '',index = -1 ){
dom = {},
dom.slides = document.querySelector( '.reveal .slides' );
var newSlide = document.createElement( 'section' );
if( index === -1 ) { //adding slide to end
newSlide.classList.add( 'future' );
dom.slides.appendChild(newSlide);
document.querySelector( '.navigate-right' ).classList.add( 'enabled' ); //just enable it, even if it is
} else if( index > Reveal.getIndices().h ) {
newSlide.classList.add( 'future' );
dom.slides.insertBefore(newSlide,dom.slides.querySelectorAll('section:nth-child('+(index+1)+')')[0]);
} else if( index <= Reveal.getIndices().h ) {
newSlide.classList.add( 'past' );
dom.slides.insertBefore(newSlide,dom.slides.querySelectorAll('section:nth-child('+(index+1)+')')[0]);
Reveal.next();
}
newSlide.innerHTML = content;
};
Reveal.remove = function( index = -1 ){
dom = {},
dom.wrapper = document.querySelector( '.reveal' );
dom.slides = document.querySelector( '.reveal .slides' );
var target = (dom.wrapper.querySelectorAll('.slides > section:nth-child('+(index+1)+')')[0]) ? dom.wrapper.querySelectorAll('.slides > section:nth-child('+(index+1)+')')[0] : false;
if( index === -1 ) {
if (Reveal.isLastSlide()) Reveal.prev();
dom.slides.removeChild(dom.wrapper.querySelectorAll('.slides > section')[dom.wrapper.querySelectorAll('.slides > section').length-1]);
if (Reveal.isLastSlide()) document.querySelector( '.navigate-right' ).classList.remove( 'enabled' );
} else if( index > Reveal.getIndices().h && target ) {
dom.slides.removeChild(target);
if (Reveal.getIndices().h == dom.wrapper.querySelectorAll('.slides > section').length-1) document.querySelector( '.navigate-right' ).classList.remove( 'enabled' );
} else if( index < Reveal.getIndices().h && target ) {
dom.slides.removeChild(target);
location.hash = '/'+parseInt(Reveal.getIndices().h-1);
} else if( index == Reveal.getIndices().h && target ) {
if (index == 0) {
Reveal.next();
document.querySelector( '.navigate-left' ).classList.remove( 'enabled' );
} else Reveal.prev();
dom.slides.removeChild(target);
if( dom.wrapper.querySelectorAll('.slides > section').length == index) document.querySelector( '.navigate-right' ).classList.remove( 'enabled' );
}
};
} );
если вы хотите использовать это, добавьте его после раскрывать.инициализировать.{(..});
позвоните с Reveal.добавить (содержимое, индекс) или раскрыть.удалить(индекс).
Reveal.add('<h3>Slide title</h3>')
добавлю, что в качестве последнего слайда,
Reveal.add('<h3>Slide title</h3>',0)
в начале.
Reveal.add('<h3>Slide title</h3>',3)
добавит его в 3-е место.
раскрыть.remove () удаляет последний слайд, показывает.удалите(n) любое другое (если оно существует).
Reveal.sync()
- это король.
вы можете динамически удалять слайды.
вот полный пример: CollaboFramework
вот пример удаление всех слайдов:
var presentation = $('#presentation');
var slides = $('#presentation .slides');
slides.empty();
вот пример добавление нового слайда
// slide 1
var section = $("<section></section>");
slides.append(section);
section.attr('data-markdown', '');
var script = $("<script></script>");
section.append(script);
script.attr('type', 'text/template');
var slideContent =
"and here is the image\r\n" +
"<img src='https://cdn.psychologytoday.com/sites/default/files/field_blog_entry_images/flower-887443_960_720.jpg' width='200px' height='200px'>\r\n" +
"and here is the list\r\n" +
"+ hopa\r\n" +
"+ cupa\r\n" +
"+ and some intended links\r\n" +
" + [CS link](http://www.CollaboScience.com)\r\n" +
" + [CA link](http://www.CollaboArte.com)\r\n" +
" + [CF link](https://github.com/Cha-OS/KnAllEdge/)\r\n";
script.html(slideContent);
это слайд Markdown, но он похож на HTML, и здесь у вас есть универсальный слайд творение
конечно, в реальном коде github вы увидите, что имеет смысл предоставить некоторую задержку для ожидания тегов для создания перед подтверждением задачи (с обратным вызовом).
наконец, нужно обновление Reveal, который appart повторной передачи с плагином markdown просто использует Reveal.sync()
.
это сделает все жонглирование класса для вас, пересчет номеров слайдов и т. д. Единственное, что еще важно-это сделать Reveal.slide(0)
чтобы убедиться, что вы не находитесь на слайде 7 из 5 :) в случае, если вы удалили 2 слайда.
мой обходной путь для этого:
-
инициализировать reveal с пустым
section
тег.HTML-код
<div class="reveal"> <div class="slides"> <section>Single Horizontal Slide</section> <section id="blank"></section><!-- Blank slug --> </div> </div>
в JavaScript
Reveal.initialize(); //slide deck wrapper deck = $('#blank').parent();
-
Сохраните этот тег, затем удалите его из DOM.
// a blank is initialized and stored as a variable wrap = $('#blank').clone() .attr('id',null) .prop('outerHTML'); // remove the blank $('#blank').remove();
-
наконец, новый элемент добавляется в колоду и завернули в пустой тег.
$('<h1>Slide added</h1>').appendTo(deck) .wrap( wrap );
здесь демо. Я не пробовал эту технику с какими-либо сложными конфигурациями, но для простой презентации этого достаточно.