javascript - 在 slider 插件上实现 RTL

标签 javascript jquery photoswipe

several 之后requests ignored由开发人员支持 RTL,我正在尝试自己做。

反转数组顺序非常简单:

self.items = !!(_options.rtl) ? _items = items.reverse() : _items = items; // Reverse the array for RTL

.. 然而,另一个挑战是滑动 RTL。因此,从幻灯片 4(第一张幻灯片)向右滑动应该会滑到下一张幻灯片(幻灯片 3)。

enter image description here

我相信所有的魔法都发生在这个函数中,但我不太清楚要调整什么:

_moveMainScroll = function(x, dragging) {

    if(!_options.loop && dragging) {

        if (_options.rtl) {
            console.log('RTL enabled');
            console.log('_currentItemIndex: ', _currentItemIndex);
            console.log('_slideSize.x: ', _slideSize.x);
            console.log('_currPositionIndex: ', _currPositionIndex);
            console.log('x: ', x);
            var newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,
                delta = Math.round(x - _mainScrollPos.x);
            console.log(newSlideIndexOffset, delta);
        }
        else {
            var newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,
            delta = Math.round(x - _mainScrollPos.x);
            console.log(newSlideIndexOffset, delta);
        }

        if( (newSlideIndexOffset < 0 && delta > 0) || (newSlideIndexOffset >= _getNumItems() - 1 && delta < 0) ) {
                x = _mainScrollPos.x + delta * _options.mainScrollEndFriction;
        } 
    }

    _mainScrollPos.x = x;
    _setTranslateX(x, _containerStyle);
}

到目前为止,这是我的代码:https://jsfiddle.net/tdx3p1p3/

最佳答案

以前从未使用过该库,所以我在这里可能有点天真。您的 rtl 选项似乎只颠倒了元素的顺序,否则没有任何效果。查看代码,我看不出这会是个问题,但我没有调查开发人员在您链接到的那篇文章中提到的标题问题。


如果我错了,请原谅我,但我认为这就是您想要的:

                            ********
 Slide1 < Slide2 < Slide3 < *Slide4*
                            ********

如果是这种情况,您希望顺序相同,但初始元素为幻灯片 4(即索引 3):

var options = {
    ...
    rtl: false,
    index: 3
};

如果是这种情况,那么我认为您甚至不需要 _options.rtl 变量。


另一方面,如果您想要这种布局:

                            ********
 Slide4 < Slide3 < Slide2 < *Slide1*
                            ********

...那么你可以使用这个配置:

var options = {
    ...
    rtl: true,
    index: 3
};

...这当然需要 _options.rtl 变量,并且可能需要围绕字幕进行测试。

关于javascript - 在 slider 插件上实现 RTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696833/

相关文章:

javascript - 使用 Javascript (AJAX) 向 Symfony2 中的路由发送请求

javascript - 如何使用正则表达式在标点符号之前匹配关键字

typescript - 如何通过 Aurelia/Typescript 导入和使用 PhotoSwipe?

android - 带有远程图像的 Phonegap + Photoswipe

javascript - 跳过innerHTML中的空值

javascript - JavaScript 如何在内部表示 DateTime 值?

php - 使用 History.js 刷新时没有持久状态

jquery-ui - Jquery 选项卡 : spinner option not working

Jquery 页面覆盖

jquery - 如何让 Photoswipe 从缩略图列表中识别整个图库