Now I developed a really nice solution. I would like to share this here.
First, information about interaction with NEOS backend (JS Events): http://neos.readthedocs.io/en/stable/ExtendingNeos/InteractionWithTheNeosBackend.html
Finally (after trying other popular sliders) I stick to http://sachinchoolur.github.io/lightslider/
The Images are nodes in a ContentCollection, rendering as
<div class="images-slider">
<ul class="slides">
<li class="image-collection-item"><img ..../></li>
<li class="image-collection-item"><img .../></li>
<li class="image-collection-item dummy"><!--showing dummy image--></li>
</ul>
</div>
Frontend js (always included):
// -------------- initialize ----------------
$(document).ready(function(){
LightSliderImageSliders.setup();
});
// ------------ LightSliderImageSliders object/namespace --------------
LightSliderImageSliders = {};
LightSliderImageSliders.setup = function (){
$('.images-slider ul.slides').each(function(){
if( $(this).find('li').length < 2 )
return; // just one slide or already set up!
var slider = $(this).lightSlider({
item: 1,
slideMargin: 0,
slideEndAnimation: false,
gallery: false
});
// attach API to the ul-node
this.lightSliderObj = slider;
// display hidden slides
$(this).find('li').css('display', 'initial');
});
}
LightSliderImageSliders.refresh = function (slider){
var refreshSlider = function(slider){
if(slider.lightSliderObj){
slider.lightSliderObj.refresh();
return true;
}
return false;
}
// refresh specific slider
if(slider){
return refreshSlider(slider);
}
// refresh all sliders
$('.images-slider ul.slides').each(function(){
refreshSlider(this);
});
}
Backend js (only included in backend, using VH {neos:rendering.inBackend()} ):
// ----------- Extend LightSliderImageSliders ------------
LightSliderImageSliders.CheckForAddedSlide = function(element){
var $el = $(element);
if($el.hasClass('image-collection-item') ){
console.log('added image-collection-item');
$el.addClass('lslide').css('display', 'initial');
LightSliderImageSliders.refresh(element.parentNode);
// move slider to the added item
LightSliderImageSliders.MoveSliderToElement(element);
}
}
LightSliderImageSliders.CheckForRemovedSlide = function(element){
var $el = $(element);
if($el.hasClass('image-collection-item') ){
console.log('removed image-collection-item');
LightSliderImageSliders.refresh(element.parentNode);
}
}
LightSliderImageSliders.MoveSliderToActiveContentElement = function(){
$el = $('.image-collection-item.neos-contentelement-active');
if( $el.length ){
LightSliderImageSliders.MoveSliderToElement($el[0]);
}
}
LightSliderImageSliders.MoveSliderToElement = function(element){
if(!element.parentNode.lightSliderObj)
return false;
// move slider to the li element
element.parentNode.lightSliderObj.goToSlide(
$(element.parentNode).find('li').index(element)
);
return true;
}
// ---------- NEOS events ------------------
document.addEventListener('Neos.PageLoaded', function(event) {
console.log('Neos.PageLoaded');
LightSliderImageSliders.setup();
LightSliderImageSliders.MoveSliderToActiveContentElement();
}, false);
document.addEventListener('Neos.ContentModuleLoaded', function(event) {
console.log('Neos.ContentModuleLoaded');
LightSliderImageSliders.MoveSliderToActiveContentElement();
}, false);
document.addEventListener('Neos.NodeSelected', function(event){
console.log('Neos.NodeSelected');
LightSliderImageSliders.MoveSliderToElement(event.detail.element);
}, false);
document.addEventListener('Neos.NodeCreated', function(event) {
console.log('Neos.NodeCreated');
LightSliderImageSliders.CheckForAddedSlide(event.detail.element);
}, false);
document.addEventListener('Neos.NodeRemoved', function(event) {
console.log('Neos.NodeRemoved');
LightSliderImageSliders.CheckForRemovedSlide(event.detail.element);
}, false);
document.addEventListener('Neos.LayoutChanged', function(event) {
console.log('Neos.LayoutChanged');
LightSliderImageSliders.refresh();
}, false);
Like this the editor can add an image with “add element after / before” directly in the Content. The slider moves to the new element. Also (thanks to the ‘Neos.NodeSelected’ - Event) it moves to the edited slide when a node in the navigate-tree is selected.
Perfect solution for me like this, maybe it’s useful for someone else too.