演示文稿運行時使用reveal.js可以添加/刪除幻燈片嗎?確切地說,有沒有一個API或者一些骯髒的解決方法?動態添加/刪除Reveal.JS中的幻燈片
回答
我很好奇這個以及即將到來的項目;環顧四周,找不到任何東西,所以我爲自己的項目寫了一些東西,最後附上了。在當前幻燈片後添加幻燈片非常簡單。只需在「.slides」中添加一個節元素,並確保該節具有「未來」類。另外,如果您在上一張幻燈片中,則需要將'enabled'類添加到'.navigate-right'。在當前幻燈片之前添加一些內容會導致編號混亂,因此您需要將其添加到「過去」類中,然後移至下一張幻燈片。
如果您刪除了「.past」幻燈片,則會損壞您的編號,如果刪除幻燈片,也會出現這種情況。我還沒有很好地測試過我的代碼,所以如果你使用它,那麼測試的效果就不錯。
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.initialize({...})後添加它;
用Reveal.add(content,index)或Reveal.remove(index)調用它。
Reveal.add('<h3>Slide title</h3>')
將在開始添加,作爲最後一張幻燈片,
Reveal.add('<h3>Slide title</h3>',0)
。
Reveal.add('<h3>Slide title</h3>',3)
會將它添加到第3個位置。
Reveal.remove()刪除最後一張幻燈片,Reveal.remove(n)任何其他(如果存在)。
我對這個解決方法是:
初始化與空
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);
這裏是一個demo。我沒有嘗試過這種技術,但是對於簡單的演示就足夠了。
Reveal.sync()
是國王。
您可以動態刪除幻燈片。
以下是完整的例子:CollaboFramework
以下爲removing all slides一個例子:
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);
一個例子,是一個減價幻燈片,但它是類似的HTML,並且在這裏你有generic slide creation
當然,在真實的github代碼中,你會看到在確認任務完成之前(回調)提供一些延遲來等待標籤被創建是有意義的。
最後,你需要update Reveal,這與markdown插件重新渲染的appart只是使用Reveal.sync()
。
這將爲你做所有的課程,講述幻燈片編號等。唯一其他重要的事情是做Reveal.slide(0)
以確保你不在第7張幻燈片中:)如果你刪除了2張幻燈片。
- 1. 添加標題幻燈片圖像RMarkdown與reveal.js幻燈片
- 2. 幻燈片不reveal.js
- 3. Reveal.js幻燈片不工作
- 4. 動態幻燈片
- 5. reveal.js標題幻燈片覆蓋
- 6. Reveal.js:有條件地顯示幻燈片
- 7. Multiplex功能與reveal.js幻燈片
- 8. 查看後從幻燈片中刪除jQuery幻燈片
- 9. 刪除幻燈片從BxSlider
- 10. 刪除幻燈片jquery bxslider
- 11. 刪除元素幻燈片
- 12. Xcode幻燈片並刪除
- 13. 在JS中添加幻燈片動畫
- 14. 動態添加圖片到圖片幻燈片
- 15. 如何添加圖片庫以通過reveal.js的幻燈片輕掃?
- 16. Jquery Flexslider添加和刪除幻燈片上的類
- 17. BX滑塊。向以前的幻燈片添加和刪除類
- 18. 動態JavaScript幻燈片
- 19. 動態背景幻燈片
- 20. 動態幻燈片插件
- 21. 動態幻燈片 - JSON
- 22. 添加空白幻燈片
- 23. 添加幻燈片UNO API
- 24. 添加幻燈片到Tictail
- 25. jQuery的幻燈片添加具有圖像幻燈片容器
- 26. 特定的幻燈片添加到幻燈片
- 27. 添加自動播放jQuery幻燈片
- 28. 向ng-repeat添加幻燈片動畫
- 29. 如何添加一個幻燈片效果到刪除類jQuery
- 30. 刪除頁面加載時的手風琴幻燈片動畫
你有沒有與此插件的背景有任何運氣? –
我一直在努力讓這段代碼正常工作。很多小東西爲我調整,但最大的是在每個函數的末尾添加'this.sync();'。這有揭示.js更新所有的內部,包括背景等。 –
我剛剛創建(仍在工作和測試)一個庫,擴展reveal.js使用上面的方法:[顯示 - add-remove.js](https ://github.com/mpelikan/reveal-add-remove.js)。謝謝@梅森。 –