过去两天我一直在尝试这个,似乎无法找到解决方案..
我有上一个和下一个箭头用于导航(以及箭头键)。但是现在我有一个时间轴,我似乎无法使用div-id(正确)跳转到幻灯片?
因此,例如,如果我想从第1部分转到第5部分,我希望能够点击我的第5部分按钮,它会跳转到该幻灯片。
Here is my working example 即可。幻灯片的时间轴显示在幻灯片2+上。例如,我只在目标部分工作。
这是我用来“跳转到幻灯片”的代码:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
但出于某种原因,我遇到了两个具体问题:
问题1:我点击进入幻灯片,然后使用箭头键返回〜这使我跳回2张幻灯片。
问题2:我点击进入幻灯片,然后使用箭头键前进〜这会打破我的滑块并显示白屏
我相信大多数探针都在这行代码中:
$('.slideshow-timeline a').click(function() {
var target_id = $(this).attr('href');
removeClasses();
$($(".tour-panel")[current]).addClass("fadeOutRight");
setTimeout(function() {
$(target_id).addClass("active-tour fadeInLeft");
}, 50);
setTimeout(function() {
$($(".tour-panel")[current]).removeClass("fadeOutRight");
}, 750);
current = target_id.split('-')[1] || 0;
});
但我并非百分百肯定并且需要你的帮助,我准备了一个非常基本的小提琴示例 here 。
我尝试过的一些事情是弄乱current = target_id.split('-')[1] || 0;
个变量,换掉split()
和nextElement();
,我找不到有效的解决方案。
非常感谢所有帮助!
答案 0 :(得分:3)
看看那个小提琴:
https://jsfiddle.net/gjyswrr9/19/
问题出在3个地方:
var previous = parseInt(current, 10) - 1;
var next = parseInt(current) + 1;
(它们是字符串,而不是整数)。
并且
current = target_id.split('-')[1] - 1 || 0;
(您计算以1开头的链接)
希望它能够满足你的需要。
答案 1 :(得分:0)
你去 - > fiddle
我基本上更改的是您在点击功能中定义的current
值。实际上,您的id
值是一个字符串,因此触发nextElement()
不会更改该值,而是会将其连接起来。这会产生一些奇怪的行为,因此您只需将0
更改为1
,而不是从目标0
更改为01
。
我还调整了您的$('.slideshow-timeline a').click(function() { }
,其行为方式与您的nextElement()
功能相同。
修改:我忘了提及
我相信大多数探针都在这行代码中:
current = target_id.split('-')[1] || 0;
你是对的。如上所述,target_id.split('-')[1]
将返回一个字符串值,而不是一个数字,如上所述,这又会导致奇怪的行为,您的代码只是将返回的字符串与数字连接起来。为了实现您想要的目标,您必须使用JavaScripts内置target_id.split('-')[1]
函数将number
的值解析为parseInt()
值。
结果如下:
current = parseInt(target_id.split('-')[1]) || 0;
答案 2 :(得分:0)
您好,请查看以下链接..
这是你正在寻找的吗?
请参阅此链接 [的jsfiddle] [1]
[1]: https://jsfiddle.net/gjyswrr9/39/
脚本代码如下,
$(document).ready(function() {
var current = 0;
function previousIndex() {
var previous = parseInt(current,10) - 1;
if(previous == 0) {
previous = $(".tour-panel").size();
}
return previous;
}
function nextIndex() {
var next = parseInt(current,10) + 1;
if(next == $(".tour-panel").size()+1) {
next = 1;
}
return next;
}
function removeClasses() {
$(".tour-panel").each(function(index) {
if(index != current) {
$(this).removeClass("active-tour fadeInRight fadeInLeft fadeOutRight fadeOutLeft");
}
})
}
function nextElement() {
removeClasses();
current = nextIndex();
setTimeout(function() {
$("#target-"+current).addClass("active-tour fadeInRight");
}, 50);
}
function previousElement() {
removeClasses();
current = previousIndex();
setTimeout(function() {
$("#target-"+current).addClass("active-tour fadeInLeft");
}, 50);
setTimeout(function() {
$($(".tour-panel")[nextIndex()]).removeClass("active-tour fadeOutRight");
}, 750);
}
$('.slideshow-timeline a').click(function() {
var target_id = $(this).attr('href');
removeClasses();
$($(".tour-panel")[current]).addClass("fadeOutRight");
setTimeout(function() {
$(target_id).addClass("active-tour fadeInLeft");
}, 50);
setTimeout(function() {
$($(".tour-panel")[current]).removeClass("fadeOutRight");
}, 750);
current = target_id.split('-')[1] || 0;
});
Mousetrap.bind('left', previousElement);
Mousetrap.bind('right', nextElement);
$(".previous").click(previousElement);
$(".next").click(nextElement);
});
答案 3 :(得分:0)
你是对的......问题出在这一行:
current = target_id.split('-')[1] || 0;
试试这个:
current = (target_id.split('-')[1] - 1) || 0; // cater for zero-index
<强>更新强>
清除了fiddle的一些问题。