iPhone浏览器滚动更快-webkit溢出滚动:触摸位置:修复不工作-Javascript替代方案?
我花了整整一天的时间和昨天的一点时间试图在iPhone上更快地滚动,默认情况下,iPhone的滚动速度非常慢 我试图补充:iPhone浏览器滚动更快-webkit溢出滚动:触摸位置:修复不工作-Javascript替代方案?,javascript,jquery,html,css,iphone,Javascript,Jquery,Html,Css,Iphone,我花了整整一天的时间和昨天的一点时间试图在iPhone上更快地滚动,默认情况下,iPhone的滚动速度非常慢 我试图补充: overflow-y: scroll; -webkit-overflow-scrolling: touch; 该元素确实可以实现更快/理想的滚动,但它会使位于固定位置的元素(如顶部和底部菜单)消失 网上有很多关于如何处理这个问题的建议,但都失败了 其中包括设置,它确实显示了以下元素: transform: translate3d(0, 0, 0); 但是,它基本上将po
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
该元素确实可以实现更快/理想的滚动,但它会使位于固定位置的元素(如顶部和底部菜单)消失
网上有很多关于如何处理这个问题的建议,但都失败了
其中包括设置,它确实显示了以下元素:
transform: translate3d(0, 0, 0);
但是,它基本上将position:fixed转换为position:absolute或static,这并不是期望的效果
我开始认为解决这个问题的唯一方法是通过Javascript,但要让它正常工作并不容易
我写过这篇文章,但它不是100%有效。也许你能帮我弄明白?还有一点要走。速度将需要动画,但如果我能让这第一件工作,然后可以处理
在底部查找bindScroll调用:
(function() {
// left: 37, up: 38, right: 39, down: 40,
// spacebar: 32, pageup: 33, pagedown: 34, end: 35, home: 36
var keys = {37: 1, 38: 1, 39: 1, 40: 1};
function preventDefault(e) {
e = e || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
function preventDefaultForScrollKeys(e) {
if (keys[e.keyCode]) {
preventDefault(e);
return false;
}
}
function disableScroll() {
if (window.addEventListener) // older FF
window.addEventListener('DOMMouseScroll', preventDefault, false);
window.onwheel = preventDefault; // modern standard
window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
window.ontouchmove = preventDefault; // mobile
document.onkeydown = preventDefaultForScrollKeys;
}
function enableScroll() {
if (window.removeEventListener)
window.removeEventListener('DOMMouseScroll', preventDefault, false);
window.onmousewheel = document.onmousewheel = null;
window.onwheel = null;
window.ontouchmove = null;
document.onkeydown = null;
}
function bindScroll(element, speed) {
var disabled = false;
var last = 0;
var to = 0;
element.addEventListener('scroll', function(event) {
if ( !disabled ) {
disabled = true; disableScroll();
var direction = 1;
if ( element.scrollTop < last ) {
direction = -1;
}
last = (element.scrollTop += speed*direction);
setTimeout(function() {
if ( element.scrollTop >= last ) {
disabled = false; enableScroll();
}
}, 1);
}
return false;
});
}
bindScroll($('.p').get(0), 100);
})();
(函数(){
//左:37,上:38,右:39,下:40,
//空格键:32,向上翻页:33,向下翻页:34,结束:35,起始:36
var键={37:1,38:1,39:1,40:1};
功能默认值(e){
e=e | | window.event;
如果(如默认)
e、 预防默认值();
e、 returnValue=false;
}
CROLLKEYS(e)的默认功能{
if(键[e.keyCode]){
防止违约(e);
返回false;
}
}
函数disableScroll(){
if(window.addEventListener)//FF
addEventListener('DOMMouseScroll',preventDefault,false);
window.onwheel=preventDefault;//现代标准
window.onmouseheel=document.onmouseheel=preventDefault;//旧浏览器,即
window.ontouchmove=preventDefault;//移动
document.onkeydown=preventDefaultForScrollKeys;
}
函数enableScroll(){
if(window.removeEventListener)
removeEventListener('DOMMouseScroll',preventDefault,false);
window.onmouseheel=document.onmouseheel=null;
window.onwheel=null;
window.ontouchmove=null;
document.onkeydown=null;
}
功能(元素、速度){
var disabled=false;
var last=0;
var-to=0;
元素。addEventListener('scroll',函数(事件){
如果(!已禁用){
disabled=true;disableScroll();
var方向=1;
if(element.scrollTop=最后一个){
disabled=false;enableScroll();
}
}, 1);
}
返回false;
});
}
bindScroll($('.p').get(0),100);
})();
是否有其他解决方案不会破坏这些内容?