我似乎无法在iPad上捕捉滚动事件.这些都不起作用,我做错了什么?
window.onscroll=myFunction;
document.onscroll=myFunction;
window.attachEvent("scroll",myFunction,false);
document.attachEvent("scroll",myFunction,false);
Run Code Online (Sandbox Code Playgroud)
它们甚至可以在Windows上的Safari 3上运行.具有讽刺意味的是,window.onload=如果您不介意破坏现有事件,PC上的每个浏览器都会支持.但没有去iPad.
所以我试图用JavaScript on scroll来调用一个函数.但我想知道我是否可以在不使用jQuery的情况下检测滚动的方向.如果没有,那么有任何解决方法吗?
我想的只是放一个"顶部"按钮,但如果可以,我想避免这样做.
我现在只是尝试使用此代码,但它不起作用:
if document.body.scrollTop <= 0 {
alert ("scrolling down")
} else {
alert ("scrolling up")
}
Run Code Online (Sandbox Code Playgroud) 我ListView展示了一些物品.我想对当前显示在可见部分的项目执行一些操作ListView,具体取决于ListView滚动的方式; 因此我想要实现OnScrollListener的ListView.根据Android api引用,onScroll方法"将在滚动完成后调用".这似乎是我所需要的,因为一旦滚动完成,我就会对其执行操作ListView(onScroll方法返回显示的第一个项目的索引和显示的项目数).
但是一旦实现,我就会看到LogCatonScroll方法不仅在滚动完成后被触发,而且对于从滚动的开始到结束进入显示视图的每个新项目都被触发.这不是我期望的行为,也不是我需要的行为.相反,侦听器的另一个方法(onScrollStateChanged)不提供有关当前显示的项目的信息ListView.
那么,有没有人知道如何使用这两种方法来检测滚动的结尾并获取有关显示项目的信息?api引用与方法的实际行为之间的不一致使我感到困惑.提前致谢.
PS:我已经看到了一些类似的话题,但没有什么能帮助我理解整个事情的运作方式......!
当我onScrollListener为我设置时ListView,它会调用onScroll.这会导致崩溃,因为某些事情尚未初始化.
这是正常的吗?注意:即使没有触摸手机,也会发生这种情况.
public class MainActivity1 extends Activity implements OnClickListener, OnScrollListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout1);
ListView lv = (ListView)findViewById(R.id.listview1);
lv.setOnScrollListener(this);
...
}
...
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount){
if( firstVisibleItem+visibleItemCount == totalItemCount ){
pullContactList();
}
}
Run Code Online (Sandbox Code Playgroud) 在iOS Safari中,单指平移在用户停止平移之前不会生成任何事件.仅当页面停止移动并重新绘制时才会生成onscroll事件.
我需要一种方法来检测实时滚动.具体来说,我想制作一个也适用于iOS Safari的粘性菜单.在非移动浏览器上,粘贴菜单可以通过在听取onscroll事件时在元素上的"position relative"到"position fixed"之间切换来完成.此方法不适用于移动浏览器,因为不会连续触发onscroll事件.我能做什么?
所以,假设我想在滚动触发的网站上添加一些昂贵的操作.例如,我在我的jsfiddle中使用视差效果.
现在我继续阅读它不能直接绑定到事件,有时后面的片段应该更好.只是一些例子:
他们说的基本上不这样做:
// Bad guy 1
$(window).scroll( function() {
animate(ex1);
});
Run Code Online (Sandbox Code Playgroud)
或这个
// Bad guy 2
window.addEventListener('scroll', onScroll, false);
function onScroll() {
animate(ex2);
}
Run Code Online (Sandbox Code Playgroud)
但是使用超时,间隔,requestAnimationFrame等等,例如:
// Good guy
$(window).scroll( function() {
scrolling1 = true;
});
setInterval( function() {
if (scrolling1) {
scrolling1 = false;
animate(ex3);
}
}, 50 );
Run Code Online (Sandbox Code Playgroud)
所以,我把上面链接中找到的选项添加到jsfiddle,试图通过在每个方法中添加一个计数器来比较它们,如下所示:
// Test
$(window).scroll( function() {
counter = counter + 1;
// output result of counter
animate(ex1);
});
Run Code Online (Sandbox Code Playgroud)
最好先检查完整的jsfiddle或使用旧的浏览器:Scrolltest(相同,只是没有上的jsfiddle)
结果:一切顺利运行的计算数量大致相同.如果我可以忍受波涛汹涌的效果,也许我可以保护一些资源.对于我读到的所有内容,这对我来说似乎合乎逻辑! …
我最近注意到,如果我在IE9中显示页面并且页面包含标记,我无法捕获BHO中"顶部"窗口的OnSroll事件: <meta http-equiv="X-UA-Compatible" content="IE=9">.
我通过在顶层文档的IHTMLWindow2中沉没DIID_HTMLWindowEvents2的DISPID_HTMLWINDOWEVENTS2_ONSCROLL来捕获滚动,并且它在所有情况下都能正常工作,除非页面包含该元标记.
我的接收器类定义为:
class CIEPage : public IDispEventImpl<1, CIEPage, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 4, 0>,
public IDispEventImpl<2, CIEPage, &DIID_HTMLWindowEvents2, &LIBID_MSHTML, 4, 0>
// SinkMap
BEGIN_SINK_MAP(CIEPage)
SINK_ENTRY_EX(1, DIID_HTMLDocumentEvents2, DISPID_HTMLELEMENTEVENTS2_ONMOUSEOVER, OnMouseOver)
SINK_ENTRY_EX(2, DIID_HTMLWindowEvents2, DISPID_HTMLWINDOWEVENTS2_ONSCROLL, OnScroll)
END_SINK_MAP()
Run Code Online (Sandbox Code Playgroud)
而我正在这样下沉.
hr = IDispEventImpl<1, CIEPage, &DIID_HTMLDocumentEvents2, &LIBID_MSHTML, 4, 0>::DispEventAdvise(_spDocument);
if(SUCCEEDED(hr))
_bAdvised[ListenerEventMouseOver] = true;
if(IsTopPage())
{
hr = _spDocument->get_parentWindow(reinterpret_cast<IHTMLWindow2 **>(&_spWindow));
if (SUCCEEDED(hr) && _spWindow)
{
hr = IDispEventImpl<2, CIEPage, &DIID_HTMLWindowEvents2, &LIBID_MSHTML, 4, 0>::DispEventAdvise(_spWindow);
if(SUCCEEDED(hr))
_bAdvised[ListenerEventScroll] = true;
}
}
Run Code Online (Sandbox Code Playgroud)
其中_spDocument是a CComPtr<IHTMLDocument2>和_spWindow aCComPtr<IHTMLWindow2>
任何想法?此外,它似乎存在IE9 SDK标头和msdn文档中的不匹配.例如在IE …
我有一个包含大量内容的滚动视图.现在,当用户进行投掷或向下滚动时,我希望滚动视图停在特定的视图位置,我正在做一些动画,然后用户可以再次投掷或向下滚动.
我已尝试禁用此处提到的scrollview 但它只在scrollview完全停止并且无法在fling中间停止时禁用.
有什么办法可以在达到某个视图位置或某个y值时停止滚动视图的投掷?
我有一个RelativeLayout,中间有一个TextView.我已经使用SimpleOnGestureListener()来检测onFling,onDown和onScroll事件.
我希望TextView能够在屏幕上跟随我的手指(可以只是在x轴上),当我抬起手指时,它会从屏幕上移动或者回到中间(取决于我有多远)感动它).
我找不到这样做之间的区别:
window.onscroll = () => console.log("scroll")
Run Code Online (Sandbox Code Playgroud)
和这个:
window.addEventListener('scroll', () => console.log("scroll"))
Run Code Online (Sandbox Code Playgroud)
除了浏览器兼容性之外,大多数 IE 版本似乎都不支持这两者!
这只是语法差异吗?使用 删除处理程序似乎很简单removeEventListener,但我假设window.onscroll = null具有类似的效果。
我错过了什么吗?