Javascript 由于目标被视为被动事件,无法在被动事件侦听器中防止默认值
由于目标被视为被动对象,我收到此错误Javascript 由于目标被视为被动事件,无法在被动事件侦听器中防止默认值,javascript,html,Javascript,Html,由于目标被视为被动对象,我收到此错误无法防止默认内部被动事件侦听器。在Chrome mobile browser中,当我尝试单击受下面粘贴的onepageascroll代码影响的区域内的链接时 该代码在桌面/全浏览器大小下运行良好,我可以单击链接 一旦在手机上查看站点,链接就变得不可访问 我搜索了错误,发现它与告诉preventDefault不要被动有关,因此我添加了e.preventDefault(),{passive:false}到//绑定触摸线下的触摸事件 这使链接再次可点击,但破坏了on
无法防止默认内部被动事件侦听器。
在Chrome mobile browser中,当我尝试单击受下面粘贴的onepageascroll代码影响的区域内的链接时
该代码在桌面/全浏览器大小下运行良好,我可以单击链接
一旦在手机上查看站点,链接就变得不可访问
我搜索了错误,发现它与告诉preventDefault不要被动有关,因此我添加了e.preventDefault(),{passive:false}编码>到//绑定触摸线下的触摸事件
这使链接再次可点击,但破坏了onepage滚动功能,因此页面不再移动
所以我猜我需要知道的是如何将“点击”和“滚动”分开
包含了我一直在使用的js代码
* onepagescroll.js v1.0.0
* Athuor : Mystika
* Fork this script on github https://github.com/mystika/onepagescroll
* http://mystika.me
function onepagescroll(selector, options) {
var pages = [];
var currentPage = 1;
var isPageChanging = false;
var keyUp = {38:1,33:1};
var keyDown = {40:1,34:1};
var def = {
pageContainer: 'li',
animationType: 'ease-in-out',
animationTime: 500,
infinite: true,
pagination: true,
keyboard: true,
direction: 'vertical',
};
var setting = extend({},def,options);
/* initialization */
function init(){
window.addEventListener('wheel',onScrollEventHandler);
css(document.querySelector(selector),{
transition: 'transform ' + setting.animationTime + 'ms ' + setting.animationType
});
//allow keyboard input
if(setting.keyboard){
addEventListener('keydown', function(e){
if(keyUp[e.keyCode])
changePage(1,pages.length,-1);
else if(keyDown[e.keyCode])
changePage(pages.length,1,1);
});
}
document.querySelector(selector).classList.add('ops-container');
detectTransitionEnd() && document.querySelector(selector).addEventListener(detectTransitionEnd(), function(){
isPageChanging = false;
});
var bullet_list_container = null;
/* create navigation bullets */
if(setting.pagination){
bullet_list_container = document.createElement("ul");
bullet_list_container.classList.add('ops-navigation');
}
var index=1;
[].forEach.call(document.querySelectorAll(selector + ' > ' + setting.pageContainer), function(obj){
if(setting.pagination){
var bullet_list = document.createElement('li');
var bullet = document.createElement('a');
bullet.setAttribute('data-targetindex',index);
bullet.href='#';
bullet_list.appendChild(bullet);
bullet_list_container.appendChild(bullet_list);
}
obj.classList.add('ops-page');
if(setting.direction == 'horizontal'){
css(obj,{
left:(index-1)*100 + '%',
position:'absolute'
});
}
pages.push(obj);
obj.setAttribute('data-pageindex',index++);
});
if(setting.pagination){
document.body.appendChild(bullet_list_container);
document.querySelector('a[data-targetindex="' + currentPage +'"]').classList.add('active');
}
}
/* wheel event handler */
function onScrollEventHandler(e){
if(e.wheelDelta > 0)
changePage(1,pages.length,-1);
else
changePage(pages.length,1,1);
}
/* dected transitions completion for block duplicated scrolling */
function detectTransitionEnd(){
var t;
var el = document.createElement('fakeelement');
var transitions = {
'transition':'transitionend',
'OTransition':'oTransitionEnd',
'MozTransition':'transitionend',
'WebkitTransition':'webkitTransitionEnd'
}
for(t in transitions)
if( el.style[t] !== undefined )
return transitions[t];
return true;
}
/* css setter */
function css(obj,styles){
for (var _style in styles)
if(obj.style[_style] !== undefined)
obj.style[_style] = styles[_style];
}
/* extend function for user customization */
function extend(){
for(var i=1; i<arguments.length; i++)
for(var key in arguments[i])
if(arguments[i].hasOwnProperty(key))
arguments[0][key] = arguments[i][key];
return arguments[0];
}
//function for page transition
function changePage(compare,edge,increase){
if(isPageChanging) return;
if(currentPage==compare){
if(setting.infinite)
currentPage = edge;
else
return;
}
else{
currentPage+=increase;
}
if(setting.animationTime) isPageChanging = true;
if(setting.pagination){
document.querySelector('a.active[data-targetindex]').classList.remove('active');
document.querySelector('a[data-targetindex="' + currentPage +'"]').classList.add('active');
}
if(setting.direction == 'vertical'){
css(document.querySelector(selector),{
transform:'translate3d(0,' + -(currentPage-1)*100 + '%,0)'
});
}
else if(setting.direction == 'horizontal'){
css(document.querySelector(selector),{
transform:'translate3d(' + -(currentPage-1)*100 + '%,0,0)'
});
}
}
/* swipe */
var fpos = 0;
var lpos = 0;
var _n = 90;
//bind touch
document.addEventListener('touchstart', function(e) {
e.preventDefault();
if (e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel') {
var touch = e.touches[0] || e.changedTouches[0];
if(setting.direction == 'vertical')
fpos = touch.pageY;
else if(setting.direction == 'horizontal')
fpos = touch.pageX;
}
});
document.addEventListener('touchend', function(e) {
e.preventDefault();
if (e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel') {
var touch = e.touches[0] || e.changedTouches[0];
if(setting.direction == 'vertical')
lpos = touch.pageY;
else if(setting.direction == 'horizontal')
lpos = touch.pageX;
}
if(fpos + _n < lpos)
changePage(1,pages.length,-1);
else if(fpos > lpos + _n)
changePage(pages.length,1,1);
});
/* check documents ready statement and do init() */
if(document.readyState === 'complete')
init();
else
window.addEventListener('onload', init(), false);
}
*onepagescroll.js v1.0.0
*雅典人:迈斯蒂卡
*在github上生成此脚本https://github.com/mystika/onepagescroll
* http://mystika.me
功能onepagescroll(选择器、选项){
var页面=[];
var currentPage=1;
var IsPageChangeing=false;
var-keyUp={38:1,33:1};
var-keyDown={40:1,34:1};
变量定义={
pageContainer:'li',
animationType:“缓进缓出”,
动画时间:500,
无限:是的,
分页:正确,
键盘:没错,
方向:'垂直',
};
var设置=扩展({},def,options);
/*初始化*/
函数init(){
窗口。addEventListener(“轮子”,位于CrolleEventHandler上);
css(文档查询选择器(选择器){
转换:“transform”+setting.animationTime+“ms”+setting.animationType
});
//允许键盘输入
如果(设置键盘){
addEventListener('keydown',函数(e){
if(键控[e.keyCode])
更改页面(1,页面长度,-1);
else if(键下[e.keyCode])
变更页(页长,1,1);
});
}
document.querySelector(选择器).classList.add('ops-container');
detectTransitionEnd()和&document.querySelector(选择器).addEventListener(detectTransitionEnd(),函数(){
isPageChanging=false;
});
var bullet\u list\u container=null;
/*创建导航项目符号*/
if(设置分页){
bullet_list_container=document.createElement(“ul”);
bullet_list_container.classList.add('ops-navigation');
}
var指数=1;
[].forEach.call(document.querySelectorAll(selector+'>'+setting.pageContainer),函数(obj){
if(设置分页){
var bullet_list=document.createElement('li');
var bullet=document.createElement('a');
bullet.setAttribute('data-targetindex',index);
bullet.href='#';
项目符号列表。追加子项(项目符号);
bullet\u list\u container.appendChild(bullet\u list);
}
obj.classList.add('ops-page');
如果(setting.direction==“水平”){
css(obj{
左:(指数-1)*100+'%',
位置:'绝对'
});
}
页面推送(obj);
obj.setAttribute('data-pageindex',index++);
});
if(设置分页){
document.body.appendChild(bullet\u list\u容器);
document.querySelector('a[data targetindex=“”+currentPage+“]”).classList.add('active');
}
}
/*控制盘事件处理程序*/
Crolleventhandler(e)上的函数{
如果(e.车轮三角洲>0)
更改页面(1,页面长度,-1);
其他的
变更页(页长,1,1);
}
/*块重复滚动的dected转换完成*/
函数detectTransitionEnd(){
变量t;
var el=document.createElement('fakeelement');
变量转换={
“transition”:“transitionend”,
“OTransition”:“oTransitionEnd”,
'MozTransition':'transitionend',
“WebKittTransition”:“WebKittTransitionEnd”
}
for(t在过渡中)
如果(el.style[t]!==未定义)
返回转换[t];
返回true;
}
/*css设置器*/
功能css(对象、样式){
for(样式中的var\u样式)
if(对象样式[_样式]!==未定义)
对象样式[_样式]=样式[_样式];
}
/*扩展用户定制功能*/
函数extend(){
对于(var i=1;i lpos+_n)
变更页(页长,1,1);
});
/*检查文档就绪语句并执行初始化()*/
如果(document.readyState==='complete')
init();
其他的
addEventListener('onload',init(),false);
}
添加事件侦听器时需要执行{passive:true}
。编辑,我看不到在代码postedI中的任何地方有这样的文档。addEventListener('touchstart',函数(e){e.preventDefault(),{passive:true};
但是这阻止了滚动是的,这就是“被动”的全部意义通过使用它,您告诉浏览器您的事件处理程序将允许默认操作继续;换句话说,您不需要.preventDefault()
。谢谢,这是我不明白的一点,我该如何保持滚动?同时允许点击通过?我也不明白为什么这个问题只会影响我的手机浏览……我想我只需要点击来保持“允许默认”的状态