自定义滑块问题
Custom slider issue
我用面向对象的javascript编写了一个自定义滑块,如下所示。我已经把这个模块放在小提琴里了https://jsfiddle.net/5z29xhzg/7/.向左或向右滑动后,幻灯片将被克隆并相应地附加,以便用户可以根据需要循环浏览滑块。有一个单独的功能用于控制活动选项卡。当单独使用时,选项卡和滑块可以完美工作,但当两者同时使用时,我遇到了问题。例如,点击"蓝色围裙",然后点击左侧的幻灯片按钮(应该会带你进入"dave&busters"幻灯片),就会带你进入幸福幻灯片。或者,使用选项卡单击最后一张幻灯片,然后单击下一个按钮不会显示任何内容。有人能指出我写的这篇文章中的缺陷吗。非常感谢您的帮助!
GiftSlider = {
prev: '.slider-container .prev',
next: '.slider-container .next',
slide: '.slide',
slidesContainer: '#slides',
navLink: '.gift-nav li a',
init: function() {
// Initialize nextSlide function when clicking right arrow
$(this.next).click(this.nextSlide.bind(this));
$(this.next).click(this.activeTabs.bind(this));
// Initialize prevSlide function when clicking left arrow
$(this.prev).click(this.prevSlide.bind(this));
$(this.prev).click(this.activeTabs.bind(this));
// Initialize toggleSlides and activeTab functions when clicking nav links
$(this.navLink).click(this.toggleSlides.bind(this));
$(this.navLink).click(this.activeTabs.bind(this));
},
nextSlide: function(e) {
// Prevent default anchor click
e.preventDefault();
// Set the current slide
var currentSlide = $('.slide.current');
// Set the next slide
var nextSlide = $('.slide.current').next();
// remove the current class from the current slide
currentSlide.removeClass("current");
// Move the current slide to the end so we can cycle through
currentSlide.clone().appendTo(this.slidesContainer);
// remove the last slide so there is not two instances
currentSlide.remove();
// Add current class to next slide to display it
nextSlide.addClass("current");
},
prevSlide: function(e) {
// Prevent defaulct anchor click
e.preventDefault();
// Set the current slide
var currentSlide = $('.slide.current');
// Set the last slide
var lastSlide = $('.slide').last();
// remove the current class from the current slide
currentSlide.removeClass("current");
// Move the last slide to the beginning so we can cycle through
lastSlide.clone().prependTo(this.slidesContainer);
// remove the last slide so there is not two instances
lastSlide.remove();
// Add current class to new first slide
$('.slide').first().addClass("current");
},
toggleSlides: function(e) {
// Prevent defaulct anchor click
e.preventDefault();
var itemData = e.currentTarget.dataset.index;
var currentSlide = $('.slide.current');
currentSlide.removeClass("current");
newSlide = $('#slide-' + itemData);
// currentSlide.clone().appendTo(this.slidesContainer);
newSlide.addClass("current");
// console.log(newSlide);
},
activeTabs: function() {
// *** This could be much simpler if we didnt need to match the slider buttons
// *** up with nav tabs. Because I need to track the slider as well, I have
// *** made this its own function to be used in both instances
// get the active slide
var activeSlide = $('.slide').filter(':visible');
// get the active slide's id
var currentId = activeSlide.attr('id');
// grab just the number from the active slide's id
var currentNum = currentId.slice(-1);
// remove any active gift-nav links
$(this.navLink).removeClass("active");
// get the current tab by matching it to the current slide's id
var currentTab = $('.gift-nav li a[data-index="' + currentNum + '"]');
// make that active
currentTab.addClass("active");
}
}
$(document).ready(function(){
// Init our objects
GiftSlider.init();
});
错误似乎在toggleSlides
中。
编辑:以下内容不起作用
加载页面时,currentSlide
为幻灯片1。现在假设您单击第三个选项卡。此时,您需要将幻灯片移动到第三个标签之前,即第二个标签的末尾。当您说currentSlide.clone().appendTo(this.slidesContainer);
时,您实际上是在将第一张幻灯片移动到末尾。因此,无论您单击哪个选项卡,当您单击上一个按钮时,它都将转到第一张幻灯片。
如果您改为使用newSlide.prev().clone().appendTo(this.slidesContainer);
,代码似乎可以正常工作。
toggleSlides: function(e) {
// Prevent defaulct anchor click
e.preventDefault();
var itemData = e.currentTarget.dataset.index;
var currentSlide = $('.slide.current');
currentSlide.removeClass("current");
newSlide = $('#slide-' + itemData);
//currentSlide.clone().appendTo(this.slidesContainer);
newSlide.prev().clone().appendTo(this.slidesContainer);
newSlide.addClass("current");
//console.log("In toggle slide: "+newSlide.next().attr("id"));
//console.log("In toggle slide: "+newSlide.prev().attr("id"));
//console.log("In toggle slide: "+$('.slide.current').next().attr("id"));
},
这似乎奏效了。查看https://jsfiddle.net/rfgnm992/1/.您的nextSlide
和previousSlide
似乎保持了当前幻灯片的开头。toggleSlides
没有这么做。
toggleSlides: function(e) {
// Prevent defaulct anchor click
e.preventDefault();
var itemData = e.currentTarget.dataset.index;
var currentSlide = $('.slide.current');
currentSlide.removeClass("current");
newSlide = $('#slide-' + itemData);
//keep new slide at the beginning and move the preceding slides to the end
newSlide.nextAll().addBack().prependTo(this.slidesContainer);
//console.log("NewSlide.next: "+newSlide.next().attr('id') + "NewSlide.next.next: "+newSlide.next().next().attr('id')+"newSlide.next.next.next: "+newSlide.next().next().next().attr('id'));
//currentSlide.clone().appendTo(this.slidesContainer);
newSlide.addClass("current");
// console.log(newSlide);
},
对不起,我回来的时间比预期的晚了一点。看了一眼。您认为整个附加/预处理/克隆操作过于复杂。
我让它工作了,但它仍然有一个小错误。它循环grand、forward和back,正确的链接高亮显示,但是当你点击随机链接时,它不会立即高亮显示,但当你点击next/prev按钮时,所选图像中的相关链接高亮显示。这当然是一个进步!!!我相信我可以再看一眼,但现在是凌晨2点,我已经看了一个半小时了!
这是一个小提琴和一个片段(只是js,因为我的消息太长了——我只是去掉了内容末尾的段落,没有css更改)
GiftSlider = {
prev: '.slider-container .prev',
next: '.slider-container .next',
slide: '.slide',
slidesContainer: '#slides',
navLink: '.gift-nav li a',
init: function() {
// Initialize nextSlide function when clicking right arrow
$(this.next).click(this.nextSlide.bind(this));
$(this.next).click(this.activeTabs.bind(this));
// Initialize prevSlide function when clicking left arrow
$(this.prev).click(this.prevSlide.bind(this));
$(this.prev).click(this.activeTabs.bind(this));
// Initialize toggleSlides and activeTab functions when clicking nav links
$(this.navLink).click(this.activeTabs.bind(this));
$(this.navLink).click(this.toggleSlides.bind(this));
},
nextSlide: function(e) {
// Prevent default anchor click
e.preventDefault();
// Set the current slide
var currentSlide = $('.slide.current');
// Set the next slide
var currentId = currentSlide.attr('id');
var currNum = (currentId.slice(-1));
var nextNum;
var increment = 1;
if (currNum == 4){
nextNum = 1;
}
else
{
nextNum = parseInt(currNum) + parseInt(increment) ;
}
var nextSlide = $('#slide-' + nextNum);
// remove the current class from the current slide
currentSlide.removeClass("current");
// Add current class to next slide to display it
nextSlide.addClass("current");
// remove the last slide so there is not two instances
},
prevSlide: function(e) {
// Prevent default anchor click
e.preventDefault();
// Set the current slide
var currentSlide = $('.slide.current');
// Set the last slide
var currentId = currentSlide.attr('id');
var currNum = (currentId.slice(-1));
var prevNum;
var decrement =1;
if (currNum == 1){
prevNum = 4;
}
else
{
prevNum = parseInt(currNum) - parseInt(decrement) ;
}
var prevSlide = $('#slide-' + prevNum);
// Move the last slide to the beginning so we can cycle through
currentSlide.removeClass("current");
// Add current class to new first slide
prevSlide.addClass("current");
},
toggleSlides: function(e) {
// Prevent defaulct anchor click
e.preventDefault();
var itemData = e.currentTarget.dataset.index;
var currentSlide = $('.slide.current');
currentSlide.removeClass("current");
newSlide = $('#slide-' + itemData);
newSlide.addClass("current");
},
activeTabs: function() {
var activeSlide = $('.slide').filter('.current');
// get the active slide's id
var currentId = activeSlide.attr('id');
// grab just the number from the active slide's id
var currentNum = currentId.slice(-1);
// remove any active gift-nav links
$(this.navLink).removeClass("active");
// get the current tab by matching it to the current slide's id
var currentTab = $('.gift-nav li a[data-index="'+ currentNum + '"]');
// make that active
currentTab.addClass("active");
}
}
$(document).ready(function(){
// Init our objects
GiftSlider.init();
});
- 自定义滑块问题
- 自定义Jquery css下拉菜单问题
- 动态加载的自定义javascript/jQuery/HTML5音频播放器的问题
- 谷歌地图自定义标记问题
- 在javascript中调用自定义谷歌搜索标签时出现问题
- 从谷歌地图自定义控件打开离子模态时遇到问题
- 在自定义元素中扩展 HTMLCanvasElement 问题
- 在具有CONTENT标记的自定义元素中使用SELECT标记时出现问题
- Magento自定义选项-清除输入字段问题
- 如何解决jquery自定义定时器问题
- 在wordpress中向自定义php模板添加滑块时出现问题
- 在构建自定义网页刮刀时遇到问题
- JQuery Mobile自定义下拉列表问题
- AJAX自定义错误处理代码问题
- 粘性导航-JS Waypoints在浏览器调整大小时出现自定义粘性导航问题
- 自定义幻灯片应用程序的问题
- 自定义过滤器的问题,我缺少什么
- 将自定义对象的猫鼬 PUT 实现到复杂架构中时出现问题
- 使用 jQuery UI 主题滚轮自定义主题实现问题
- 自定义 Mod 文件夹的角度路由问题