jQuery scrollLeft无法使用angular

时间:2013-11-21 17:15:01

标签: javascript jquery css angularjs scroll

我正在尝试以编程方式滚动div,水平溢出。我非常有信心我的最终结果代码应如下所示:

  var $element = $('#widgetRow');//or maybe $('#widgetRow').parent();
  //With 1 or more parent()'s

  var scrollLeft = $element.scrollLeft();
  $element.animate({'scrollLeft':scrollLeft + delta},10);

但我似乎无法找到合适的元素,所以它不起作用,所以我写了这个小片段来测试所有滚动的父元素。

  $('#someDeepWidget').parents().each(function(){
     $(this).animate({'scrollLeft':300},10);
  });

有些元素滚动,但不是我需要的元素。但是,正确的元素会使用以下方式水平滚动:

  $('#someDeepWidget').parents().each(function(){
    $(this).animate({'scrollTop':300},10);
  });

但我似乎无法弄清楚哪个元素会起作用。我一直在我的HTML上放置id并将它们作为目标,但仍然,scrollLeft在我需要的元素上失败。

我正在使用Angular,我不知道这是否会以某种方式干扰。

2 个答案:

答案 0 :(得分:1)

Nehat(来自www.lin.net.nz: Problem: jQuery ScrollLeft Chrome Hidden Div)指出,这有时可以通过

来解决
  element.css({'overflow': 'auto'}).scrollLeft();
  element.css({'overflow': 'hidden'});

这让我想知道,这会有用吗?

 $('#someDeepWidget').parents().each(function(){
   $(this).css({'overflow': 'auto'}).animate({'scrollLeft':300},10);
   $(this).css({'overflow': 'hidden'});
 });

和魔术一样滚动内容!

凭借这些知识,我在Chrome中改进了HTML的元素,在我修改html文档和尝试解决方案之前,我在Chrome中注意到Angular正在添加到我的页面,这个元素:

<div data-role="page" data-url="/" tabindex="0" class="ui-page ui-page-theme-a ui-page-active">

所以我为这个新发现的元素添加了一条css规则:

[data-role="page"]{
  overflow:auto;
}

最终代码如下:

app.directive("gphBubbleHorizontalScrolling", function($swipe) {
  'use strict';
  return {
    restrict: 'EA',
    link: function(scope, ele, attrs, ctrl) {
      $swipe.bind(ele, {
        'start': function(coords,event) {
          startX = coords.x;
          startY = coords.y;
        },
        'move': function(coords) {
          pointX = coords.x;
          pointY = coords.y;
          if(pointY < startY + 20 && pointY > startY - 20){
            var delta =  startX - pointX;
            $('[data-role="page"]').animate({'scrollLeft':scrollLeft + delta},10);
            var scrollLeft = $('[data-role="page"]').scrollLeft();
          }
        }
      });
    }
  }
}

答案 1 :(得分:0)

在加载页面时,我必须水平滚动到特定列2/3,然后我有一个固定数量的列,所以我采用了一种非常简单的方法。

$(".ngViewport").scrollLeft(($("#datagrid").width())/4);
  1. 我使用jQuery中的ngViewportscrollLeft轻松完成。 .ngViewport定位任何ng网格。我使用了#datagrid并转换了宽度值。
  2. 我将4除以得到加载我的数据网格的中间列,并像魅力一样工作,因为我的数据有固定数量的列。