【问题标题】:Mobile / Touch Enabled Screens - horizontal scroll on swipe移动/触摸屏 - 滑动时水平滚动
【发布时间】:2023-11-27 23:44:01
【问题描述】:

这个问题是在this SO question详细讨论后提出的

问题:

我需要一个水平滚动条,可以在桌面上使用鼠标拖动和在启用触摸的屏幕上滑动事件进行滚动

可能的解决方案:

我尝试使用 jQuery dragscrollable,它在台式机上运行良好,但在支持触控的设备上运行良好

然后我继续探索Touch Swipe Jquery Plugin 并在JSFiddle Code 提出了一个可能的解决方案,而JSFiddle 的结果可以在here 找到

您还可以在 here 找到一个工作演示

我的java脚本代码如下

//to detect if device has touch enabled
var is_touch_device = 'ontouchstart' in document.documentElement;

        $(function() 
        {
                $('.myClass').dragscrollable();
                //if touch is enabled then we have to map the swipe event                         
                if(is_touch_device)
                    $('.panel_list').swipe( { swipeStatus:scroll_panel_list, allowPageScroll:'horizontal' } );
                function scroll_panel_list(event, phase, direction, distance)
                {
                    var pos = $('.myClass').scrollLeft();
                    if(direction == 'left')
                    {
                        $('.myClass').animate({scrollLeft: pos + 200} );
                    }
                    if(direction == 'right')
                    {
                        $('.myClass').animate({scrollLeft: pos - 200} );
                    }
                }    
            });​

我已经测试过它在 Android 浏览器上运行良好,但在 iPhone 上的响应速度不是很好。

有人可以帮我想出一个更好的解决方案吗?我正在使用 twitter 引导程序

编辑:1

现在我想我可能已经找到了一个不错的插件,它似乎在桌面和支持触控的设备上运行良好,该插件名为 jquery.dragscroll,我有一个更新的演示 here

编辑:2

似乎还有另一个插件支持触控设备,它被称为Overscroll。我还没评价呢

【问题讨论】:

  • 在 Windows Phone 7 上也不工作
  • @Sherbrow 现在如果它主要适用于 iOS 设备和 Android 设备,我将非常高兴!查看我更新的解决方案,让我知道你的想法!
  • 接受的这个问题的答案指向一个死链接。

标签: javascript twitter-bootstrap touch horizontal-scrolling swipe-gesture


【解决方案1】:

此外,还有“Swipeview”脚本 http://cubiq.org/swipeview

【讨论】:

    【解决方案2】:

    我找到了一个较旧的解决方案并将其修改为水平滚动。我已经在 Android Chrome 和 iOS Safari 上对其进行了测试,并且监听器触摸事件已经存在很长时间了,所以它有很好的支持:http://caniuse.com/#feat=touch

    用法:

    touchHorizScroll('divIDtoScroll');
    

    功能:

    function touchHorizScroll(id){
        if(isTouchDevice()){ //if touch events exist...
            var el=document.getElementById(id);
            var scrollStartPos=0;
    
            document.getElementById(id).addEventListener("touchstart", function(event) {
                scrollStartPos=this.scrollLeft+event.touches[0].pageX;              
            },false);
    
            document.getElementById(id).addEventListener("touchmove", function(event) {
                this.scrollLeft=scrollStartPos-event.touches[0].pageX;              
            },false);
        }
    }
    function isTouchDevice(){
        try{
            document.createEvent("TouchEvent");
            return true;
        }catch(e){
            return false;
        }
    }   
    

    独创垂直单指触控滚动:

    http://chris-barr.com/2010/05/scrolling_a_overflowauto_element_on_a_touch_screen_device/

    Vertical 现在有一个简化的 CSS 解决方案,但不适用于移动设备上的水平 DIV 滚动:

    -webkit-overflow-scrolling: touch
    

    该问题还要求 鼠标在桌面上抓取,这可以通过 Nice Scroll 来完成,如果您需要,它可以与我上面的解决方案协同工作:

    https://github.com/inuyaksa/jquery.nicescroll

    var nice = $("#mydiv").getNiceScroll({horizrailenabled: true, hwacceleration: true});
    

    【讨论】:

      【解决方案3】:

      这是可能的

      http://labs.rampinteractive.co.uk/touchSwipe/demos/Page_scrolling.html

      $('body').swipe({
              swipe: function(event, direction, distance, duration, fingerCount) {
                  switch (direction) {
                      case 'left':
                          // Code here
                          break;
                      case 'right':
                         //Code here
                         break;
                  }
              },
              allowPageScroll: "vertical"
          });
      

      【讨论】: