单击跳转到下一张幻灯片

Jump to next slide onClick

本文关键字:一张 幻灯片 单击      更新时间:2023-09-26

我已经创建了一个带有箭头的滑块,效果很好,但我需要在内部幻灯片上添加一个链接,单击该链接,即可转到下一张幻灯片。

我的代码如下。

<script type="text/javascript">
  $(function () {
    var Page = (function () {
      var $navArrows = $('#nav-arrows'),
      $nav = $('#nav-dots > span'),
      slitslider = $('#slider').slitslider({
        onBeforeChange: function (slide, pos) {
          $nav.removeClass('nav-dot-current');
          $nav.eq(pos).addClass('nav-dot-current');
        }
      }),
      init = function () {
        initEvents();
      },
      initEvents = function () {
        // add navigation events
        $navArrows.children(':last').on('click', function () {
          slitslider.next();
          return false;
        });
        $navArrows.children(':first').on('click', function () {
          slitslider.previous();
          return false;
        });
        $nav.each(function (i) {
          $(this).on('click', function (event) {
            var $dot = $(this);
            if (!slitslider.isActive()) {
              $nav.removeClass('nav-dot-current');
              $dot.addClass('nav-dot-current');
            }
            slitslider.jump(i + 1);
            return false;
          });
        });
      };
      return { init: init };
    })();
    Page.init();
  });
</script> 

下面是我在幻灯片中使用的HTML。

<div class="sl-slide" data-orientation="vertical" data-slice1-rotation="10" data-slice2-rotation="-15" data-slice1-scale="1.5" data-slice2-scale="1.5">
  <div class="sl-slide-inner">
    <div class="">
      <a href="#" class="anhrClr custAnchr"><span class="splAncStl"><nav id="nav-arrows1">
        <span>Click to next slide</span>
      </nav></span></a>
    </div>
  </div>
</div>

你可以用$.trigger('click'(模拟点击事件。试着绑定你想推迟事件的<a>,如下所示:

$('a.anhrClr.custAnchr').on('click', function(e) {
    $('.nav-arrow-next').trigger('click');
    e.preventDefault();
    return false;
});

编辑:为了澄清,e.preventDefault()return false;是为了防止浏览器处理对锚点元素的单击。否则,您的浏览器可能会滚动到带有href="#"的页面顶部,或者做其他不希望做的事情。

case arrow.right :
                    self._stopSlideshow();
                    self._navigate( 'next' );
                    break;

这是来自键盘导航的代码。所以你可以试试

$('.anhrClr').click(function(){
    slitslider._navigate( 'next' );
    return false;
});

请看示例文档-http://tympanus.net/codrops/2012/06/05/fullscreen-slit-slider-with-jquery-and-css3/

更新在示例中,我们可以找到_navigate函数:

_navigate : function( dir, pos ) {
    if( this.isAnimating || this.slidesCount < 2 ) {
        return false;
    }
    this.isAnimating = true;
    var self = this,
        $currentSlide = this.$slides.eq( this.current );
    // if position is passed
    if( pos !== undefined ) {
        this.current = pos;
    }
    // if not check the boundaries
    else if( dir === 'next' ) {
        this.current = this.current < this.slidesCount - 1 ? ++this.current : 0;
    }
    else if( dir === 'prev' ) {
        this.current = this.current > 0 ? --this.current : this.slidesCount - 1;
    }
    this.options.onBeforeChange( $currentSlide, this.current );
    // next slide to be shown
    var $nextSlide = this.$slides.eq( this.current ),
        // the slide we want to cut and animate
        $movingSlide = ( dir === 'next' ) ? $currentSlide : $nextSlide,
        // the following are the data attrs set for each slide
        configData = $movingSlide.data(),
        config = {};
    config.orientation = configData.orientation || 'horizontal',
    config.slice1angle = configData.slice1Rotation || 0,
    config.slice1scale = configData.slice1Scale || 1,
    config.slice2angle = configData.slice2Rotation || 0,
    config.slice2scale = configData.slice2Scale || 1;
    this._validateValues( config );
    var cssStyle = config.orientation === 'horizontal' ? {
            marginTop : -this.size.height / 2
        } : {
            marginLeft : -this.size.width / 2
        },
        // default slide's slices style
        resetStyle = {
            'transform' : 'translate(0%,0%) rotate(0deg) scale(1)',
            opacity : 1 
        },
        // slice1 style
        slice1Style = config.orientation === 'horizontal' ? {
            'transform' : 'translateY(-' + this.options.translateFactor + '%) rotate(' + config.slice1angle + 'deg) scale(' + config.slice1scale + ')'
        } : {
            'transform' : 'translateX(-' + this.options.translateFactor + '%) rotate(' + config.slice1angle + 'deg) scale(' + config.slice1scale + ')'
        },
        // slice2 style
        slice2Style = config.orientation === 'horizontal' ? {
            'transform' : 'translateY(' + this.options.translateFactor + '%) rotate(' + config.slice2angle + 'deg) scale(' + config.slice2scale + ')'
        } : {
            'transform' : 'translateX(' + this.options.translateFactor + '%) rotate(' + config.slice2angle + 'deg) scale(' + config.slice2scale + ')'
        };
    if( this.options.optOpacity ) {
        slice1Style.opacity = 0;
        slice2Style.opacity = 0;
    }
    // we are adding the classes sl-trans-elems and sl-trans-back-elems to the slide that is either coming "next"
    // or going "prev" according to the direction.
    // the idea is to make it more interesting by giving some animations to the respective slide's elements
    //( dir === 'next' ) ? $nextSlide.addClass( 'sl-trans-elems' ) : $currentSlide.addClass( 'sl-trans-back-elems' );
    $currentSlide.removeClass( 'sl-trans-elems' );
    var transitionProp = {
        'transition' : 'all ' + this.options.speed + 'ms ease-in-out'
    };
    // add the 2 slices and animate them
    $movingSlide.css( 'z-index', this.slidesCount )
                .find( 'div.sl-content-wrapper' )
                .wrap( $( '<div class="sl-content-slice" />' ).css( transitionProp ) )
                .parent()
                .cond(
                    dir === 'prev', 
                    function() {
                        var slice = this;
                        this.css( slice1Style );
                        setTimeout( function() {
                            slice.css( resetStyle );
                        }, 50 );
                    }, 
                    function() {
                        var slice = this;
                        setTimeout( function() {
                            slice.css( slice1Style );
                        }, 50 );
                    }
                )
                .clone()
                .appendTo( $movingSlide )
                .cond(
                    dir === 'prev', 
                    function() {
                        var slice = this;
                        this.css( slice2Style );
                        setTimeout( function() {
                            $currentSlide.addClass( 'sl-trans-back-elems' );
                            if( self.support ) {
                                slice.css( resetStyle ).on( self.transEndEventName, function() {
                                    self._onEndNavigate( slice, $currentSlide, dir );
                                } );
                            }
                            else {
                                self._onEndNavigate( slice, $currentSlide, dir );
                            }
                        }, 50 );
                    },
                    function() {
                        var slice = this;
                        setTimeout( function() {
                            $nextSlide.addClass( 'sl-trans-elems' );
                            if( self.support ) {
                                slice.css( slice2Style ).on( self.transEndEventName, function() {
                                    self._onEndNavigate( slice, $currentSlide, dir );
                                } );
                            }
                            else {
                                self._onEndNavigate( slice, $currentSlide, dir );
                            }
                        }, 50 );
                    }
                )
                .find( 'div.sl-content-wrapper' )
                .css( cssStyle );
    $nextSlide.show();
}