在我正在处理的应用程序中,我有一个简单的样式UITableView,它可以包含一个包含零行的部分.我希望能够使用scrollToRowAtIndexPath滚动到此部分:atScrollPosition:animated:但是当我尝试滚动到此部分时由于缺少子行而出现错误.
Apple的日历应用程序可以执行此操作,如果您在列表视图中查看日历,并且今天日历中没有事件,则今天会插入空白部分,您可以使用工具栏中的"今天"按钮滚动到该部分在屏幕的底部.据我所知,Apple可能正在使用自定义的UITableView,或者他们正在使用私有API ......
我能想到的唯一解决方法是在0像素高的位置插入一个空的UITableCell并滚动到那个.但我的理解是,拥有不同高度的单元格对于滚动性能来说真的很糟糕.无论如何我仍然会尝试,也许性能打击不会太糟糕.
更新
由于似乎没有解决方案,我已经向苹果公司提交了一份错误报告.如果这对您也有影响,请提交rdar:// problem/6263339(Open Radar链接)的副本,如果您希望更快地修复此问题.
更新#2
我对这个问题有一个不错的解决方法,请看下面的答案.
在下面的代码中,我正在检查窗口是否正在滚动超过某个点,如果是,请更改元素以使用固定位置,以便它不会滚动到页面顶部.唯一的问题是,似乎是高度客户端内存密集型(并且实际上阻碍了滚动速度),因为在每个滚动像素我都在元素上反复更新样式属性.
在尝试更新之前检查attr是否已经存在会产生重大影响吗?是否有完全不同且更有效的实践来获得相同的结果?
$(window).scroll(function () {
var headerBottom = 165;
var fcHeight = $("#pnlMainNavContainer").height();
var ScrollTop = $(window).scrollTop();
if (ScrollTop > headerBottom) {
$("#HeaderContentBuffer").attr("style", "margin-top:" + (fcHeight) + "px;");
$("#AddFieldsContainer").attr("style", "position:fixed;width:320px;top:70px;left:41px;");
} else {
$("#HeaderContentBuffer").attr("style", "margin-top: 0px;");
$("#AddFieldsContainer").removeAttr("style");
}
});
Run Code Online (Sandbox Code Playgroud)
当我输入此内容时,我注意到StackOverflow.com使用相同类型的功能,并在本页右侧使用黄色的"类似问题"和"帮助"菜单.我不知道他们是怎么做到的.
在我的应用程序中,我有一个ScrollView,其中包含一些线性视图,一些textview和一个Webview,然后是其他线性布局等.问题是WebView不会滚动.Scroll仅侦听ScrollView.有什么建议??
<ScrollView >
<TextView />
<WebView /> <-- this does not scroll
<TextView />
</ScrollView >
Run Code Online (Sandbox Code Playgroud) 在一个反应应用程序中,我有一个方法被调用以将特定节点带入视图,如下所示.
scrollToQuestionNode(id) {
const element = document.getElementById(id);
element.scrollIntoView(false);
}
Run Code Online (Sandbox Code Playgroud)
滚动很好,但滚动动作有点不稳定.我怎样才能让它顺利?我没有看到任何我可以为scrollIntoView提供的选项.
当您激活"冻结窗格"时,如何创建一个锁定第一行和第一列的表(如在Excel中)?我需要表格水平和垂直滚动(存在很多解决方案,但只允许垂直滚动).
因此,当您向下滚动表格时,第一行将保持不变,因为它将具有列标题.thead无论是什么使得解决方案变得更容易,这可能最终都会出现,或者可能不会出现.
向右滚动时,第一列保持不变,因为它保存行的标签.
我很确定单独使用CSS是不可能的,但有人能指出我的JavaScript解决方案吗?它需要在所有主流浏览器中工作.
有谁知道是否有办法在jquery对话框中禁用滚动条?我在div中的内容是300 px,但对话框设置为200px.它自动放置滚动条但我不想要它们.我将自己添加到第二个div,它使它比窗口大.任何帮助表示赞赏.
我希望我的网页只能垂直滚动.所以我已经设定overflow-x:hidden;了我的.page-wrapper.我.page-wrapper把两个绝对定位的层叠在一起.单击按钮时,顶层滑动到侧面(如上所述position:absolute;)并使网站实际上比100%视口更宽 - 因此它可以水平滚动.
为了防止水平滚动我设置overflow-x:hidden为我的.page-wrapper.
如果我这样做,我的正常内容的垂直滚动实际上是错误的,并且无法正常工作.
任何想法如何解决?
UPDATE
-webkit-overflow-scrolling: touch;似乎工作得很好,因为没有javascript正在改变任何高度.请参阅以下示例.我在这里做的是将主体的高度更新为第二层的内容高度 - 因此一旦上层向左滑动,就没有空的滚动空间.当向上滑动上层时,我style从主体上移除了attribte (设置高度).在这样做后,滚动再次波动.
function showInfos(show) {
if ( show ) {
$('#videos').addClass('slid');
$('body').height($('#infos > .content').height());
$('#page-wrap').addClass('no-overflow');
} else if ( !show ) {
$('#videos').removeClass('slid');
$('#page-wrap').removeClass('no-overflow');
$('body').removeAttr('style');
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个用户第一次滚动的页面,它实际上并没有向下滚动页面,而是添加了一个带有转换的类.我想检测用户何时向下滚动,因为如果他向上滚动,我希望它能做其他事情.我发现的所有方法都是基于定义当前正文ScrollTop,然后在页面滚动后与body scrollTop进行比较,定义方向,但由于页面实际上没有滚动,所以body scrollTop()不会改变.
animationIsDone = false;
function preventScroll(e) {
e.preventDefault();
e.stopPropagation();
}
$('body').on('mousewheel', function(e) {
if (animationIsDone === false) {
$("#main-header").removeClass("yellow-overlay").addClass("yellow-overlay-darker");
$(".site-info").first().addClass("is-description-visible");
preventScroll(e);
setTimeout(function() {
animationIsDone = true;
}, 1000);
}
});
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的,但是这样,我滚动它的方向并不重要,触发事件
我对现有的视差库感到不满,所以我正在努力编写自己的视差库.我目前的课程包括三个主要课程:
ScrollDetector跟踪元素相对于屏幕的滚动位置; 它具有返回表示其当前位置的float的函数:
0 表示位于视口底部边缘的元素的上边缘1 表示位于视口顶部边缘的元素的下边缘ScrollAnimation使用ScrollDetector实例根据元素在另一个元素上插入任意CSS值ScrollDetector.ParallaxativeAnimationScrollAnimation针对背景图像的特殊情况进行扩展,该背景图像应以窗口滚动速度的精确因子滚动.我目前的情况是这样的:
ScrollAnimationS使用transform: translateY(x)工作进展顺利.ParallaxativeAnimation使用translateY(x)工作,但动画jerkily.ParallaxativeAnimation使用的translate3d(0, x, 0)是生涩,但不是那么糟糕.translate3d(0, x, 0),工作完全顺利.你可以在这支笔上看到比较.(jerkiness在Firefox中表现得最好.)我的图书馆在Bitbucket上.
我不知道我的图书馆里的问题在哪里,我不知道如何弄明白.这是一个精简的粘贴,在ScrollAnimation顺利滚动的课程中完成繁重的工作:
getCSSValue(set, scrollPosition) {
return set.valueFormat.replace(set.substitutionString, ((set.endValue - set.startValue) * scrollPosition + set.startValue).toString() + set.unit)
}
updateCSS() {
var cssValues = [];
var scrollPosition = this.scrollDetector.clampedRelativeScrollPosition();
var length = this.valueSets.length;
for(var i …Run Code Online (Sandbox Code Playgroud) scroll ×10
javascript ×5
css ×4
jquery ×3
iphone ×2
parallax ×2
performance ×2
android ×1
cocoa-touch ×1
css-tables ×1
dialog ×1
excel ×1
ios ×1
jquery-ui ×1
reactjs ×1
scrollview ×1
webview ×1