所有Widget类型的节点都支持addTouchEventListener和addClickEventListener这两个接口。可以通过些接口来接收触摸事件。
addTouchEventListener的使用步骤如下(C++):
1)准备好你的widget节点,在编辑器中开启交互(或在代码中setTouchEnabled(true))。
2)定义一个函数,形式如下
void ACuteClass::onTouchEvent(cocos2d::Ref ref, Widget::TouchEventType touchType)
{
switch(touchType)
{
case Widget::TouchEventType::BEGAN:
CCLOG("on began");
break;
case Widget::TouchEventType::MOVED:
CCLOG("on moved");
break;
case Widget::TouchEventType::ENDED:
CCLOG("on ended");
break;
case Widget::TouchEventType::CANCELED:
CCLOG("on canceled");
break;
default:
CCLOG("impossible");
}
}
3)把这个函数传递给addTouchEventListener接口:
1
your_widget->addTouchEventListener(CC_CALLBACK_2(ACuteClass::onTouchEvent, this));//CC_CALLBACK_2照着写,表示有两个参数的回调。
ok搞定。
addTouchEventListener的使用方法一样,不同的地方是:回调函数onTouchEvent在一次触摸中只回调一次,触发ENDED时回调。
关于点击没响应的可能:
没开启交互。
控件被挡住。
其他细节
1 如何获取触摸事件的坐标
用下面这几个接口:
getTouchBeganPosition
getTouchMovePosition
getTouchEndPosition
看名字就知道获取的是什么了吧。
2 关于ScrollView在某些情况下点到子控件不能拖动的问题
现在的Studio支持同时创建widget和非Widget类型的节点。这样会有一个问题。
Widget类型接受到触摸事件时,会把这些事件向上层传递,但是在遇到非Widget节点时会停下来。这会导致点击ScrollView等View类中的控件(两者之间有node)拖动时,拖动失败。
解决方案:
设置View中的控件的SwalloTouches属性为false。使控件不截断touch事件
改下源码:将如下代码替换掉Widget中同名函数。
void Widget::propagateTouchEvent(cocos2d::ui::Widget::TouchEventType event, cocos2d::ui::Widget sender, cocos2d::Touch touch)
{
Widget widgetParent = nullptr;
for(Node p = this;widgetParent == nullptr;)
{
p = p->getParent();
if(p)
{
widgetParent = dynamic_cast(p);
}
else
{
return;
}
}
widgetParent->interceptTouchEvent(event, sender, touch);
}
ui::TextField
类似于addTouchEventListener
1设置交互或者setTouchEnabled(true)
2编写一个监听函数:
void yourClass::textFieldEvent(Ref pSender, TextField::EventType type)
{
switch (type)
{
case TextField::EventType::ATTACH_WITH_IME:
CCLOG("获得输入焦点");
break;
case TextField::EventType::DETACH_WITH_IME:
CCLOG("获得输入焦点");
break;
case TextField::EventType::INSERT_TEXT:
CCLOG("输入了文本");
break;
case TextField::EventType::DELETE_BACKWARD:
CCLOG("获得输入焦点");
break;
default:
break;
}
}
3设置监听:
yourTextField->addEventListener(CC_CALLBACK_2(yourClass::textFieldEvent, this));
让popverd出框始终显示在中间位置 就不要用 <a href='#popver'>,自己写一个标签,比如:
<button type="button" @click="transferOder">转移订单</button>
通过点击事件 控制 popver的显示和<div class="mui-backdrop "></div>的显示
并且在点击事件中控制popver的定位: $('#middlePopover')css('top',$(window)scrollTop()+180)//定位的关键代码
这样不管页面如何滚动 popver始终处于最中间的位置。
############
刚好最近在写一个vue 和mui的项目,mui的popver封装的js是定位点击的位置,不能让他始终在中间,又看了网上各种各样的答案都不太符合,然后自己写了一个。有什么不懂的可以邮件635036447@qqcom
根据我的查询,mui-upload组件提供了一个fileList属性,用于获取上传行数,具体可以通过 thisrefsuploadstatefileListlength来获取行数。
jQuery ajax中数据以键值对(Key/Value)的形式发送到服务器,使用ajax提交表单数据时可以使用jQuery ajax的serialize() 方法表单序列化为键值对(key1=value1&key2=value2…)后提交。serialize() 方法使用标准的 URL-encoded 编码表示文本字符mui怎样快速获取提交表单值,像jquery的serialize那样
在项目开发中遇到这样的功能,要求实现列表页动态加载功能,在实现过程中遇到一些小小插曲,下面小编给大家详细说明下解决方法:
首次加载时可以获取成功,再次加载失败,通过chrome调试发现img
的
data-lazyload
属性没改变
调试的时候发现了bug
$fnimageLazyload
=
function(options)
{
var
lazyloadApis
=
[];
thiseach(function()
{
var
self
=
this;
var
lazyloadApi
=
null;
if
(self
===
document
||
self
===
window)
{
self
=
documentbody;
}
//对,bug就在这,判定时如果body已有该属性,就不在加载了,整体的代码没看明白,注释太少了啊
var
id
=
selfgetAttribute('data-imageLazyload');
if
(!id)
{
id
=
++$uuid;
$data[id]
=
lazyloadApi
=
new
ImageLazyload(self,
options);
selfsetAttribute('data-imageLazyload',
id);
}
else
{
lazyloadApi
=
$data[id];
}
lazyloadApispush(lazyloadApi);
});
return
lazyloadApislength
===
1
lazyloadApis[0]
:
lazyloadApis;
}
问题找到了,那么就在再次加载数据时,清除该属性就ok了
documentbodyremoveAttribute('data-imagelazyload');
mui(document)imageLazyload({
placeholder:
'//images/img_head3png'
});
以上所述是小编给大家介绍的MUI
解决动态列表页懒加载再次加载不成功的bug问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
以上就是关于mui on事件 回调函数中的参数event怎么使用全部的内容,包括:mui on事件 回调函数中的参数event怎么使用、mui怎样让popverd出框始终显示在中间位置、获得mui-upload上传行数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)