我正在尝试以编程方式滚动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,我不知道这是否会以某种方式干扰。
答案 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);
ngViewport
和scrollLeft
轻松完成。
.ngViewport
定位任何ng
网格。我使用了#datagrid
并转换了宽度值。