jQuery Slider在移动的上无法正常工作

ojsjcaue  于 2023-08-04  发布在  jQuery
关注(0)|答案(4)|浏览(138)

**2015年7月24日更新:由于我无法迁移代码,并且有冲突问题,我完全改变了库。对我来说,最快的解决方案是http://refreshless.com/nouislider/。它仍然允许我使用jquery所做的同样的简短编码来检索值。我不能保证这有多轻,但我可以推荐一个客户网站上的临时修复程序。
**2015年7月30日更新:已经尝试了jQuery UI和Touch Punch,它们都导致了进一步的问题。在这种情况下,唯一的解决方案是没有UI滑块。您的项目可能会有所不同,但对于4年以上的旧框架上严重的jQuery脚本冲突,这是我的解决方案。

下面的代码(示例位于:http://www.equant-design.com/aab/shop/category/new-in-whats-new/89)给了我相当的思考,因为我正在帮助一个客户将他的网站转换为响应模式。滑块按编码工作,但在移动的设备上,范围仅通过单击刻度导轨而不是书挡来定义范围。我正准备完全删除代码,但想看看是否有人知道这个问题的快速修复。
jQuery版本:1.4.2

<script type="text/javascript">
    $('#price-range-filter-header').click(function() {
        FilterContainerSlideUpDown('filter_but', 'price-range-filter-header');
        });
    $(function() {
        $("#slider-range").slider({
            range: true,
            min: 0,
            max: 300,
            values: [0, 300],
            step: 5,
            slide: function(event, ui)
            {
                $("#slider-range-caption").html('<?=$currency_type->symbol?>' + ui.values[0] + ' - ' + '<?=$currency_type->symbol?>' + ui.values[1]);
            },
            change: function(event,ui)
            {
                ApplyPriceRangeFilter(ui.values[0],ui.values[1]);
            }

        });

        $("#slider-range-caption").html('<?=$currency_type->symbol?>' + $("#slider-range").slider("values", 0) + ' - ' + '<?=$currency_type->symbol?>' + $("#slider-range").slider("values", 1));

        //initialise jquery scrollbar
        $('.scrollbar').scrollbar();
    });
</script>

<div id="filter_but" name="filter_but">
    <div id="slider-range"></div>
</div>

字符串

qnakjoqk

qnakjoqk1#

要使jQuery UI小部件在移动的上工作,您需要集成对触摸事件的支持。
在本项目中已经做到了这一点:jQuery UI Touch Punch
你只需要把它包含在jQuery和jQuery UI之后。

<script src="jquery.ui.touch-punch.min.js"></script>

字符串

kmbjn2e3

kmbjn2e32#

我也遇到了同样的麻烦,沿着很多移动的网络应用程序。最后,厌倦了触摸管理,外部js,jQuery等等第四,我使用了http://refreshless.com/nouislider/。(请确保我从2012年的v1.4中掠夺了这样的应用程序,在线或Phonegap)。
完美、简单、清晰,因此易于定制。
我的答案:NoUiSlider。定义

  • OMG dont dive in tricky dev.让它简单 *
lsmepo6l

lsmepo6l3#

在我看来,页面和滚动有问题。如果我是你,我会禁用页面拖动(同时仍然允许滚动),这样当用户滑动滑块时,他们就不会拖动页面。下面的代码需要使用jQuery移动的:

$(document).delegate('.ui-page', 'touchmove', false);

字符串
或者,您可以使用Foundation或Bootstrap等前端框架,您可以使用他们的工具来确保事情处于正确的位置并且真正对移动的友好。

yhuiod9q

yhuiod9q4#

我发现了一个解决方案,可以从touch{start/end/move}事件执行内部jQuery UI ._mouse{Down/Up/Move}函数。

$(function() {
    $("#slider-range").slider({
        range: true,
        min: 0,
        max: 300,
        values: [0, 300],
        step: 5,
        // ...
    });

    // workaround -  convert touch to mouse events
    jQuery(document).on('touchstart', '#slider-range .ui-slider-handle', function (e) {
        let t = e.touches[0] || e;
        jQuery(this).addClass('ui-state-hover').addClass('ui-state-active').addClass('ui-state-focus')
        var newEvent = new MouseEvent('mousedown', {
          screenX: t.screenX, screenY: t.screenY,
          clientX: t.clientX, clientY: t.clientY,
          relatedTarget: t.target,
        })
        Object.defineProperty(newEvent, 'target', {value: t.target, enumerable: true});
        Object.defineProperty(newEvent, 'currentTarget', {value: t.target, enumerable: true});
        jQuery(this).parent().slider("instance")._mouseDown(newEvent)
    });
    jQuery(document).on('touchend', '#slider-range .ui-slider-handle', function (e) {
        let t = e.touches[0] || e;
        jQuery(this).removeClass('ui-state-hover').removeClass('ui-state-active').removeClass('ui-state-focus')
        var newEvent = new MouseEvent('mouseup', {
          screenX: t.screenX, screenY: t.screenY,
          clientX: t.clientX, clientY: t.clientY,
          relatedTarget: t.target,
        })
        Object.defineProperty(newEvent, 'target', {value: t.target, enumerable: true});
        Object.defineProperty(newEvent, 'currentTarget', {value: t.target, enumerable: true});
        jQuery(this).parent().slider("instance")._mouseUp(newEvent)
    });
    jQuery(document).on('touchmove', '#slider-range .ui-slider-handle', function (e) {
        let t = e.touches[0] || e;
        var newEvent = new MouseEvent('mousemove', {
          screenX: t.screenX, screenY: t.screenY,
          clientX: t.clientX, clientY: t.clientY,
          relatedTarget: t.target,
          'bubbles': true,
          'cancelable': true,
        });
        Object.defineProperty(newEvent, 'target', {value: t.target, enumerable: true});
        Object.defineProperty(newEvent, 'currentTarget', {value: t.target, enumerable: true});
        jQuery(this).parent().slider("instance")._mouseMove(newEvent);
    });
    
});

个字符
我尝试了一个更简单的解决方案与dispatchEvents,但它不工作。

相关问题