首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >幻灯片:如何使用div ids跳转到不同的幻灯片?

幻灯片:如何使用div ids跳转到不同的幻灯片?
EN

Stack Overflow用户
提问于 2016-01-21 17:21:49
回答 2查看 332关注 0票数 1

我正在建设一个“产品之旅”。它是作为一个全屏幻灯片构建的,我有prevnext箭头用于导航(以及箭头键)。但是现在我有了时间线,我似乎不能用div-id“跳到”幻灯片

例如,如果我想从第1节转到第5节,我希望能够点击我的section 5按钮,然后它跳到幻灯片上。

这是我的工作例子。滑块的时间线出现在幻灯片2+上。例如,我只在target部分中工作。

对于jQuery,下面是我为binding和创建slider编写的所有代码

代码语言:javascript
复制
/* Product Tour */

$(document).ready(function() {
var current = 0;

function previousIndex() {
  var previous = current - 1;
  if(previous == -1) {
      previous = $(".tour-panel").size() -1;
  }
  return previous;
}

function nextIndex() {
  var next = current + 1;
  if(next == $(".tour-panel").size()) {
    next = 0;
  }
  return next;
}

function removeClasses() {
  $(".tour-panel").each(function(index) {
    if(index != current) {
        $(this).removeClass("active-tour");
    }
  })
}

function nextElement() {
  removeClasses();
  $($(".tour-panel")[current]).addClass("fadeOutLeft");
  current = nextIndex();
  setTimeout(function() {
    $($(".tour-panel")[current]).addClass("active-tour fadeInRight");
  }, 50);
  setTimeout(function() {
    $($(".tour-panel")[previousIndex()]).removeClass("active-tour fadeOutLeft");
  }, 750);
}

function previousElement() {
  removeClasses();
  $($(".tour-panel")[current]).addClass("fadeOutRight");
  current = previousIndex();
  setTimeout(function() {
    $($(".tour-panel")[current]).addClass("active-tour fadeInLeft");
  }, 50);
  setTimeout(function() {
    $($(".tour-panel")[nextIndex()]).removeClass("active-tour fadeOutRight");
  }, 750);
}

Mousetrap.bind('left', previousElement);
Mousetrap.bind('right', nextElement);

$(".previous").click(previousElement);
$(".next").click(nextElement);
});

我使用一个addClassremoveClass来切换活动页面(或者您实际看到的页面)。

这里也是我的时间线的HTML,您可以看到我只是尝试使用一个a标记来交换幻灯片。

代码语言:javascript
复制
<ul class="slideshow-timeline">
    <li class="active-target-main"><a href="#target">Target</a>
        <ul class="current-section">
            <li><a href="#target-1">Tracking</a></li>
            <li><a href="#target-2">Segmentation</a></li>
            <li><a href="#target-3">Wealth Screening</a></li>
            <li><a href="#target-4">Targeting</a></li>
            <li><a href="#target-5">Cultivation</a></li>
        </ul>
    </li>
    <li><a href="#connect">Connect</a></li>
    <li><a href="#convert">Convert</a></li>
    <li><a href="#optimize">Optimize</a></li>


</ul>

谢谢您的帮助和回复!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-21 18:00:30

我没有办法检查这段代码,但我相信下面的代码应该有效,至少在这5部分中是这样的。

  1. 获取目标的id,即链接的href属性。 target_id = $(this).attr('href');
  2. 删除当前面板上的active-tour类 removeClasses();
  3. 添加当前面板上的active-tour (target_id)和动画的fadeInLeft $(Target_id).addClass(“活动-旅游fadeInLeft");
  4. 移除“上一”面板上的退出动画类(fadeOutRight) $($(".tour-panel")current).removeClass("fadeOutRight");
  5. 最后,设置current面板索引 current = target_id.split('-')1 x= 0;

所以,

代码语言:javascript
复制
$('.current-section li 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;
});
票数 1
EN

Stack Overflow用户

发布于 2016-01-21 18:14:48

这可以通过重构JS来完成。我们将添加一个也可用于箭头导航的函数。它看起来可能是这样的:

首先,我们将创建一些变量(因为存储通常比创建jQuery-对象更快):

代码语言:javascript
复制
var current = 0,
    $panels = $('.tour-panel'),
    noOfPanels = $panels.size() - 1,
    $currentElement = $panels.eq(current),
    $nextElement = $currentElement,
    $links = $('.slideshow-timeline a');

在本例中,重要的是$links$panels包含相同数量的元素。现在,我们可以编写更改$panels的函数了。

代码语言:javascript
复制
function anyElement( slidePosition ) {
    $nextElement = $panels.eq(next);
    if (slidePosition > current) {
        $currentElement.removeClass('active-tour');
        $currentElement.addClass('fadeOutLeft');
        setTimeout(function () {
            $nextElement.addClass('active-tour fadeInRight');
        }, 50);
        setTimeout(function () {
            $currentElement.removeClass('fadeOutLeft');
        }, 750);
    } else if (slidePosition < current) {
        $currentElement.removeClass('active-tour');
        $currentElement.addClass('fadeOutRight');
        setTimeout(function () {
            $nextElement.addClass('active-tour fadeInLeft');
        }, 50);
        setTimeout(function () {
            $currentElement.removeClass('fadeOutRight');
        }, 750);
    } else {
        // in this case the element selected and the one showing are the same
        // there are no class changes to be applied
    }
    current = slidePosition;
    $currentElement = $nextElement;
}

该函数接受参数slidePosition (代表新panelindex的数字)并更改appropiate类。

现在剩下的就是将函数绑定到用户交互中。

如果匹配的$links之一是clicked,我们将检查它是index,并使用它作为新函数的参数。

代码语言:javascript
复制
$links.on('click', function () {
    e.preventDefault();
    var next = $links.index(this);
    anyElement( next );
});

我们以类似的方式处理箭头和Mousetrap。知道current位置后,我们计算出所需的位置(考虑到panels的最大数目)。

代码语言:javascript
复制
$('.previous').click(function () {
    var previous;
    if (current === 0) {
        previous = noOfPanels;
    } else {
        previous = current - 1;
    }
    anyElement( previous );
});
Mousetrap.bind('left', function () {
    var previous;
    if (current === 0) {
        previous = noOfPanels;
    } else {
        previous = current - 1;
    }
    anyElement( previous );
});

$('.next').click(function () {
    var next;
    if (current === noOfPanels) {
        next = 0;
    } else {
        next = current + 1;
    }
    anyElement( next );
});
Mousetrap.bind('right', function () {
    var next;
    if (current === noOfPanels) {
        next = 0;
    } else {
        next = current + 1;
    }
    anyElement( next );
});

我没有时间去测试这个,但我相信它应该能工作。如前所述,重要的是$links$panels具有相同数量的元素,并且排列顺序相同。

)有一些开销。您可能希望删除一些全局变量,而使用参数。)

在边节点上:

代码语言:javascript
复制
$('.myClass').eq(5)

返回一个jQuery对象,并且(据我所知)比

代码语言:javascript
复制
$($('.myClass')[5])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34930263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档