局部刷新iscroll控件的具体使用(下拉刷新,上拉加载更
多)
(1)引用iscroll的js文件以及css文件,注意一定要引用css文件,否则将会出现不能拖动的问题。
(2)页面配置:
将所要刷新的内容放到
当页面内容超过当前页面显示区域时,iscroll将会自动出现滚动条,额外的要设置wrapper的css样式为position:absolute,否则将出现不能拖动问题。
下拉刷新...
(3)js相关配置
①创建列表
function createHtml(list){}
var myScroll, pullUpEl,pullDownOffset, pullUpOffset,generatedCount = 0;
var page = 1;
var hasNew=true;
②初始化iScroll控件
Loaded()定义iscroll的刷新动作,上拉加载更多,下拉刷新列表,若没有更多数据将提示“加载完成,没有更多记录”,myScroll = new iScroll(),设置iscroll的基本属性,当手动滑
动iscroll屏幕时,如果当前纵坐标大于5时,证明向下滑动,所以将提示“下拉刷新”,并且滑动完将纵坐标置为0,即回到顶部。当纵坐标大于最大的纵坐标+5时,说明正在向下滑动,将提示“下拉加载更多“;当滑动结束将判断是上拉还是下拉确定是否执行加载下一页数据还是刷新列表回到第一页。
function loaded() {
pullDownEl = document.getElementById('pullDown');
pullDownOffset = pullDownEl.offsetHeight;
pullUpEl = document.getElementById('pullUp');
pullUpOffset = pullUpEl.offsetHeight;
myScroll = new iScroll(
'wrapper',
{
scrollbarClass : 'myScrollbar', //重要样式
useTransition : false,
topOffset : pullDownOffset,
onRefresh : function() {
上拉加载更多...';
},
onScrollMove : function() {
if (this.y > 5
'松手开始更新...';
this.minScrollY = 0;
} else if (this.y < (this.maxScrollY - 5)
'松手开始更新...';
this.maxScrollY = this.maxScrollY;
} else if (this.y > (this.maxScrollY + 5)
'上拉加载更多...';
this.maxScrollY = pullUpOffset;
}
},
onScrollEnd : function() {
});
setTimeout(function() {
document.getElementById('wrapper').style.left = '0';
}, 800);
}
③初始化绑定iScroll控件。
document.addEventListener('touchmove', function(e) {}, false);
document.addEventListener('DOMContentLoaded', loaded, false);
④滚动翻页(自定义实现此方法)myScroll.refresh(),当执行翻页时将加载下一页数据,即ajax请求后台数据,将当前页数加1,传到后台,后台返回数据,前端将数据展示在页面上,当数据加载完成后,调用界面更新方法,页面滚动到相应的滑动位置。
function pullUpAction() {
setTimeout(
function() {
var el, li, i;
page++;
ajax请求
}
myScroll.refresh();
if(!hasNew){
$(".pullUpLabel").html("加载完成,没有更多记录");
}
}, 1000); }
function pullDownAction() {
setTimeout(
function() {
var el, li, i;
page=1;
ajax请求 }
myScroll.refresh();
}, 1000);
}
Android焦点事件分发与传递机制 下面我们就从源码来带大家进行安卓TV焦点事件的传递 这里先给出Android系统View的绘制流程: 依次执行View类里面的如下三个方法: measure(int ,int) :测量View的大小 layout(int ,int ,int ,int) :设置子View的位置 draw(Canvas) :绘制View内容到Canvas画布上 ViewRootImpl的主要作用如下(此处不多讲,如有意图,看源码): A:链接WindowManager和DecorView的纽带,更广一点可以说是Window和View之间的纽带。 B:完成View的绘制过程,包括measure、layout、draw过程。 C:向DecorView分发收到的用户发起的event事件,如按键,触屏等事件。 ViewRootImpl不再多余叙述,进入正题: Android焦点分发的主要方法以及拦截方法的讲解。 在RootViewImpl中的函数通道是各种策略(InputStage)的组合,各策略负责的任务不同,如SyntheticInputStage、ViewPostImeInputStage、NativePostImeInputStage等等,这些策略以链表结构结构起来,当一个策略者没有消费事件时,就传递个下一个策略者。其中触摸和按键事件由ViewPostImeInputStage处理。
@Override protected int onProcess(QueuedInputEvent q) { if (q.mEvent instanceof KeyEvent) { return processKeyEvent(q);//如果是按键事件走此处,处理按键和焦点问题了 } else { final int source = q.mEvent.getSource(); if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) { return processPointerEvent(q);//如果是触摸事件走此处 } else if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) { return processTrackballEvent(q); } else { return processGenericMotionEvent(q); } } } processKeyEvent(QueuedInputEvent q)源码如下: @Override protected void onDeliverToNext(QueuedInputEvent q) { if (mUnbufferedInputDispatch && q.mEvent instanceof MotionEvent && ((MotionEvent)q.mEvent).isTouchEvent() && isTerminalInputEvent(q.mEvent)) { mUnbufferedInputDispatch = false; scheduleConsumeBatchedInput(); } super.onDeliverToNext(q); } private int processKeyEvent(QueuedInputEvent q) { final KeyEvent event = (KeyEvent)q.mEvent; // Deliver the key to the view hierarchy. if (mView.dispatchKeyEvent(event)) { return FINISH_HANDLED; } if (shouldDropInputEvent(q)) { return FINISH_NOT_HANDLED; }
window.location.reload();页面实现跳转和刷新 1 history.go(0) 2 location.reload() 3 location=location 4 location.assign(location) 5 document.execCommand('Refresh') 6 window.navigate(location) 7 location.replace(location) 8 document.URL=location.href 这几个都可以刷新 window.location.reload();刷新
window.location.href=window.location.href;刷新 window.close();关闭窗口,不弹出系统提示,直接关闭 window.close()相当于self属性是当前窗口 window.parent.close()是parent属性是当前窗口或框架的框架组 页面实现跳转的九种方法实例: <html> < head> < meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < title>navigate</title> < script language="javascript">
setTimeout('window.navigate("top.html");',2000); setTimeout('window.document.location.href="top.html";',20 00); setTimeout('window.document.location="top.html";',2000); setTimeout('window.location.href="top.html";',2000); setTimeout('window.location="top.html";',2000); setTimeout('document.location.href="top.html";',2000); setTimeout('document.location="top.html";',2000); setTimeout('location.href="top.html";',2000); setTimeout('location.replace("top.html")',2000);
浅议Qt的事件处理机制 深入了解事件处理系统对于每个学习Qt人来说非常重要,可以说,Qt是以事件驱动的UI工具集。大家熟知Signals/Slots在多线程的实现也依赖于Qt的事件处理机制。 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生、分发、接受和处理事件: 1. 谁来产生事件:最容易想到的是我们的输入设备,比如键盘、鼠标产生的 keyPressEvent,keyReleaseEvent,mousePressEvent,mouseReleaseEvent事件(他们被封装成QMouseEvent和QKeyEvent),这些事件来自于底层的操作系统,它们以异步的形式通知Qt事件处理系统,后文会仔细道来。当然Qt自己也会产生很多事件,比如QObject::startTimer()会触发QTimerEvent. 用户的程序可还以自己定制事件。 2. 谁来接受和处理事件:答案是QObject。在Qt的内省机制剖析一文已经介绍QObject 类是整个Qt对象模型的心脏,事件处理机制是QObject三大职责(内存管理、内省(intropection)与事件处理制)之一。任何一个想要接受并处理事件的对象均须继承自QObject,可以选择重载QObject::event()函数或事件的处理权转给父类。
3. 谁来负责分发事件:对于non-GUI的Qt程序,是由QCoreApplication负责将QEvent分发给QObject的子类-Receiver. 对于Qt GUI程序,由QApplication来负责。 接下来,将通过对代码的解析来看看QT是利用event loop从事件队列中获取用户输入事件,又是如何将事件转义成QEvents,并分发给相应的QObject处理。 [cpp]view plainc opy 1.#include
jsp+ajax实现无刷新,鼠标离开文本框即验证用户名 jsp+ajax实现无刷新,鼠标离开文本框即验证用户名(本功能多用于注册)input.jsp(表单提交页面):%@ page contentType=text/html; charset=GBK % html style type=text/css !-- @import url(../aqgc/style_c.css); -- jsp+ajax实现无刷新,鼠标离开文本框即验证用户名(本功能多用于注册) input.jsp(表单提交页面): <%@ page contentType="text/html; charset=GBK" %>