2017-08-01 73 views
0

我在codepen.io中找到了这个滑块,我想将其插入到我的网站上以承载客户的推荐。但现在,我想改变幻灯片的效果......我怎样才能使它只向左/右滑动33%,而不是100%,因为它被编程为?有没有什么办法让这个滑块只滑动33%而不是100%

这里是笔:https://codepen.io/Roemerdt/pen/VjVpOa

function Slider(slides, container) { 
    this.slides = slides; 
    this.container = container || document.body; 
    this.currentSlide = 1; 
    this.uid = String.fromCharCode(65 + Math.floor(Math.random() * 26)) + Date.now(); 
    this.initialize(); 
} 

Slider.prototype.createElement = function sliderCreateElement(type, content, parent, id, classes) { 
    var parent = parent || document.body; 
    var classes = classes || []; 
    var element = document.createElement(type); 
    element.innerHTML = content; 
    if(id !== '') { 
     element.id = id; 
    } 
    for(var i = 0, n = classes.length; i < n; i++) { 
     element.classList.add(classes[i]); 
    } 
    parent.appendChild(element); 

    return element; 
} 

Slider.prototype.initialize = function sliderInitialize() { 
    var sliderElement = this.createElement('div', '', this.container, 'slider-' + this.uid); 
    var arrows = this.createElement('div', '', sliderElement, '', ['arrows']); 
    var arrowBackward = this.createElement('div', '', arrows, 'arrow-back-'+this.uid, ['arrow-backward']); 
    var arrowForward = this.createElement('div', '', arrows, 'arrow-front-'+this.uid, ['arrow-forward']); 
    this.createElement('i', '', arrowBackward, '', ['fa', 'fa-angle-left']); 
    this.createElement('i', '', arrowForward, '', ['fa', 'fa-angle-right']); 

    arrowBackward.addEventListener('click', this.slideBackward.bind(this), true); 
    arrowForward.addEventListener('click', this.slideForward.bind(this), true); 

    var slides = this.createElement('div', '', sliderElement, '', ['slides']); 
    var slidesList = this.createElement('ul', '', slides, 'slides-list-'+this.uid, ['slides-list']); 

    if(this.slides.length !== 0) { 
     for(var i = 0, n = this.slides.length; i < n; i++) { 
      var slide = this.createElement('li', '', slidesList, 'slide' + (i+1) + '-' + this.uid, ['slide']); 
      this.createElement('span', this.slides[i][0], slide, 'slide' + (i+1) + '-span-' + this.uid, ['slide-span']); 
      slide.style.background = 'salmon url(' + this.slides[i][1] + ')'; 
      slide.style.backgroundSize = 'cover'; 
      slide.style.backgroundPosition = 'center center'; 
     } 
    } else { 
     this.createElement('li', 'Slide 1', slidesList, 'slide1-'+this.uid, ['slide']); 
    } 
} 

Slider.prototype.slideBackward = function SliderBackward() { 
    var slidesList = document.getElementById('slides-list-'+this.uid); 
    var currentFirstChild = slidesList.firstChild; 
    var lastSlideClone = slidesList.lastChild.cloneNode(true); 
lastSlideClone.style.marginLeft = -(slidesList.offsetWidth) + 'px'; slidesList.insertBefore(lastSlideClone, slidesList.firstChild); 
slidesList.firstChild.style.removeProperty('margin-left'); 
setTimeout(function(){ slidesList.removeChild(slidesList.lastChild) }, 200); 
} 

Slider.prototype.slideForward = function SliderForward() { 
    var slidesList = document.getElementById('slides-list-'+this.uid); 
    var firstSlideClone = slidesList.firstChild.cloneNode(true); 
    slidesList.appendChild(firstSlideClone); 
    slidesList.firstChild.style.marginLeft = slidesList.firstChild.style.marginLeft - slidesList.offsetWidth + 'px'; 
    setTimeout(function(){ slidesList.removeChild(slidesList.firstChild) }, 200); 
} 

var newSlider = new Slider([ 
    ['Slide 1', 'http://downloads.inspirationhut.net/wp-content/uploads/2014/08/preview-23.jpg'], 
    ['Slide 2', 'http://downloads.inspirationhut.net/wp-content/uploads/2014/08/preview-43.jpg'] 
], document.getElementById('container')); 

感谢,

汤姆

回答

1

您可以调整,并允许溢出在[id*='slider']上显示2张额外的图像。 position + left可用于.arrow-forward箭头。

function Slider(slides, container) { 
 
\t this.slides = slides; 
 
\t this.container = container || document.body; 
 
\t this.currentSlide = 1; 
 
\t this.uid = String.fromCharCode(65 + Math.floor(Math.random() * 26)) + Date.now(); 
 
\t this.initialize(); 
 
} 
 

 
Slider.prototype.createElement = function sliderCreateElement(type, content, parent, id, classes) { 
 
\t var parent = parent || document.body; 
 
\t var classes = classes || []; 
 
\t var element = document.createElement(type); 
 
\t element.innerHTML = content; 
 
\t if(id !== '') { 
 
\t \t element.id = id; 
 
\t } 
 
\t for(var i = 0, n = classes.length; i < n; i++) { 
 
\t \t element.classList.add(classes[i]); 
 
\t } 
 
\t parent.appendChild(element); 
 
\t 
 
\t return element; 
 
} 
 

 
Slider.prototype.initialize = function sliderInitialize() { 
 
\t var sliderElement = this.createElement('div', '', this.container, 'slider-' + this.uid); 
 
\t var arrows = this.createElement('div', '', sliderElement, '', ['arrows']); 
 
\t var arrowBackward = this.createElement('div', '', arrows, 'arrow-back-'+this.uid, ['arrow-backward']); 
 
\t var arrowForward = this.createElement('div', '', arrows, 'arrow-front-'+this.uid, ['arrow-forward']); 
 
\t this.createElement('i', '', arrowBackward, '', ['fa', 'fa-angle-left']); 
 
\t this.createElement('i', '', arrowForward, '', ['fa', 'fa-angle-right']); 
 
\t 
 
\t arrowBackward.addEventListener('click', this.slideBackward.bind(this), true); 
 
\t arrowForward.addEventListener('click', this.slideForward.bind(this), true); 
 
\t 
 
\t var slides = this.createElement('div', '', sliderElement, '', ['slides']); 
 
\t var slidesList = this.createElement('ul', '', slides, 'slides-list-'+this.uid, ['slides-list']); 
 
\t 
 
\t if(this.slides.length !== 0) { 
 
\t \t for(var i = 0, n = this.slides.length; i < n; i++) { 
 
\t \t \t var slide = this.createElement('li', '', slidesList, 'slide' + (i+1) + '-' + this.uid, ['slide']); 
 
\t \t \t this.createElement('span', this.slides[i][0], slide, 'slide' + (i+1) + '-span-' + this.uid, ['slide-span']); 
 
\t \t \t slide.style.background = 'salmon url(' + this.slides[i][1] + ')'; 
 
\t \t \t slide.style.backgroundSize = 'cover'; 
 
\t \t \t slide.style.backgroundPosition = 'center center'; 
 
\t \t } 
 
\t } else { 
 
\t \t this.createElement('li', 'Slide 1', slidesList, 'slide1-'+this.uid, ['slide']); 
 
\t } 
 
} 
 

 
Slider.prototype.slideBackward = function SliderBackward() { 
 
\t var slidesList = document.getElementById('slides-list-'+this.uid); 
 
\t var currentFirstChild = slidesList.firstChild; 
 
\t var lastSlideClone = slidesList.lastChild.cloneNode(true); 
 
lastSlideClone.style.marginLeft = -(slidesList.offsetWidth) + 'px'; \t slidesList.insertBefore(lastSlideClone, slidesList.firstChild); 
 
slidesList.firstChild.style.removeProperty('margin-left'); 
 
setTimeout(function(){ slidesList.removeChild(slidesList.lastChild) }, 200); 
 
} 
 

 
Slider.prototype.slideForward = function SliderForward() { 
 
\t var slidesList = document.getElementById('slides-list-'+this.uid); 
 
\t var firstSlideClone = slidesList.firstChild.cloneNode(true); 
 
\t slidesList.appendChild(firstSlideClone); 
 
\t slidesList.firstChild.style.marginLeft = slidesList.firstChild.style.marginLeft - slidesList.offsetWidth + 'px'; 
 
\t setTimeout(function(){ slidesList.removeChild(slidesList.firstChild) }, 200); 
 
} 
 

 
var newSlider = new Slider([ 
 
\t ['Slide 1', 'http://downloads.inspirationhut.net/wp-content/uploads/2014/08/preview-23.jpg'], 
 
\t ['Slide 2', 'http://downloads.inspirationhut.net/wp-content/uploads/2014/08/preview-43.jpg'],['Slide 3', 'http://downloads.inspirationhut.net/wp-content/uploads/2014/08/preview-23.jpg'], 
 
\t ['Slide 4', 'http://downloads.inspirationhut.net/wp-content/uploads/2014/08/preview-43.jpg'] 
 
], document.getElementById('container'));
body, html { 
 
    width: 100%; 
 
    height: 100%; 
 
    margin: 0; 
 
    font-family: 'Roboto', 'Helvetica', 'Arial', sans-serif; 
 
} 
 

 
ul { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
#container { 
 
    padding: 8px 0; 
 
    overflow:hidden; 
 
    margin:0 8px; 
 
} 
 

 
[id*='slider'] { 
 
    width: 33.33%; 
 
    min-height: 200px; 
 
    background-color: salmon; 
 
    box-sizing: border-box; 
 
    position: relative; 
 
} 
 
[id*='slider'] .arrows { 
 
    width: 100%; 
 
    height: 200px; 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-box-pack: justify; 
 
     -ms-flex-pack: justify; 
 
      justify-content: space-between; 
 
    -webkit-box-align: center; 
 
     -ms-flex-align: center; 
 
      align-items: center; 
 
    position: relative; 
 
    z-index: 2; 
 
} 
 
[id*='slider'] .arrows .arrow-backward { 
 
    width: 30px; 
 
    height: 30px; 
 
    background: rgba(0, 0, 0, 0.4); 
 
    cursor: pointer; 
 
} 
 
[id*='slider'] .arrows .arrow-backward:hover { 
 
    background: rgba(0, 0, 0, 0.65); 
 
} 
 
[id*='slider'] .arrows .arrow-backward i { 
 
    color: white; 
 
    font-size: 30px; 
 
    margin-left: 8px; 
 
    margin-top: -1px; 
 
} 
 
[id*='slider'] .arrows .arrow-forward { 
 
    width: 30px; 
 
    height: 30px; 
 
    background: rgba(0, 0, 0, 0.4); 
 
    cursor: pointer; 
 
    position: relative; 
 
    left: 200%; 
 
} 
 
[id*='slider'] .arrows .arrow-forward:hover { 
 
    background: rgba(0, 0, 0, 0.65); 
 
} 
 
[id*='slider'] .arrows .arrow-forward i { 
 
    color: white; 
 
    font-size: 30px; 
 
    margin-left: 11px; 
 
    margin-top: -1px; 
 
} 
 
[id*='slider'] .slides { 
 
    position: absolute; 
 
    bottom: 0; 
 
    right: 0; 
 
    left: 0; 
 
    top: 0; 
 
} 
 
[id*='slider'] .slides .slides-list { 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 
[id*='slider'] .slides .slides-list .slide { 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: flex; 
 
    -webkit-box-pack: center; 
 
     -ms-flex-pack: center; 
 
      justify-content: center; 
 
    -webkit-box-align: center; 
 
     -ms-flex-align: center; 
 
      align-items: center; 
 
    min-width: 100%; 
 
    height: 100%; 
 
    font-size: 2em; 
 
    color: white; 
 
    -webkit-transition: margin 200ms ease-in-out; 
 
    transition: margin 200ms ease-in-out; 
 
} 
 

 
pre { 
 
    margin: 0px 8px; 
 
    padding: 1em !important; 
 
    background: #f5f7f9; 
 
    border: 0 !important; 
 
    border-bottom: 1px solid #d8dee9 !important; 
 
    border-left: 2px solid #69c !important; 
 
    color: #666; 
 
    white-space: pre-wrap; 
 
} 
 

 
#todo { 
 
    margin-top: 10px; 
 
} 
 

 
#code-title { 
 
    margin: 30px 8px 5px; 
 
}
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script> 
 
<script src="https://use.fontawesome.com/38906fe9fe.js"></script> 
 
<div id="container"></div> 
 

 
<pre id="todo">Todo: <br>- add animation for going back a slide<br>- don't allow arrows to function while slider is still sliding</pre> 
 

 
<h3 id="code-title">Create a new slider</h3> 
 
<pre class="prettyprint">var newSlider = new Slider([ 
 
\t ['Slide 1', 'background-image1.jpg'], 
 
\t ['Slide 2', 'background-image1.jpg'], 
 
\t ['Slide 3', 'background-image1.jpg'], 
 
\t ['Slide 4', 'background-image1.jpg'] 
 
], document.getElementById('container'));</pre>

https://codepen.io/gc-nomade/pen/breEEZ

+0

非常感谢! :) –

+0

只有一件事...尽管幻灯片#4不可见,但当您滑动横条时,它在那里......有什么方法可以将它从那里拿出来吗? –

+0

@TomDavies抱歉,我没有看到那个水平滚动条。你指的是,你在哪里使用哪个浏览器? –

0

在你的CSS,你只是做#slider { width=33%; }代替#slider { width=100%; }

+0

谢谢您的回答!但我所要求的是改变滑动效果......像三个物体的图像,而按下按钮时只有一个物体被省略 –

+0

哦......好的。我明白你的意思。 – stephenpassero

相关问题