Прокручиваемый список отскакивает к началу [iScroll], эффект резиновой ленты?
Разработка приложения для Android в html5(phonegap), и мне пришлось использовать scrollView. Можно найти что-нибудь в html5, как у нас в Java, поэтому я пытаюсь использовать библиотеку iScroll
который служил цели прокрутки, но когда я прокручиваю вниз, он отскакивает назад к вершине, я думаю, это называется эффектом резиновой ленты. Как мне справиться с этим глюком? Плюс, когда я перемещаюсь вниз, перетаскивая, я получаю предупреждение в Logcat:
W/webview(2795): Miss a drag as we are waiting for WebCore's response for touch down.
Проверьте мой следующий код, в котором элементы списка добавляются динамически, что не должно быть проблемой, проблема IMO заключается в самом html.
<!DOCTYPE html>
<html>
<head>
<title>Storage Example </title>
<link rel="stylesheet" type="text/css" href="indexCss.css" />
<style type="text/css" media="all">
body,ul,li {
padding:0;
margin:0;
border:0;
}
</style>
<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script src="index.js" type="text/javascript" charset="utf-8" >
</script>
</head>
<body>
<header>
<input type="text" id="name" placeholder="enter name" />
<input type="button" value="Add" onclick='Add();' />
</header>
<div id="wrapper">
<div id="scroll-content">
<div id="result"></div>
</div>
</div>
<footer>
Some Footer Content
</footer>
<script type="text/javascript" src="iscroll.js"></script>
<script type="text/javascript">
var theScroll;
function scroll() {
theScroll = new iScroll('wrapper');
}
document.addEventListener('DOMContentLoaded', scroll, true);
</script>
</body>
</html>
4 ответа
Я решил эту проблему, удалив height:100%;
собственность из моей обертки.
bottom:0;
убедился, что оболочка растянута до самого конца экрана.
Попробуй это:
scroll = new iScroll(this, {
useTransform: false,
useTransition: true
});
Если не работает, пройдите по ссылке: https://groups.google.com/forum/.
Эта проблема возникает, когда у вас есть container
Div для вашего wrapper
Исправление для этого состоит в том, чтобы установить высоту container
в 99%
,
Ниже приводится CSS, который, наконец, исправил эту проблему для меня:
#productsScreen{ /* my container */
height: 99%;
z-index: 1;
top: 0px;
left: 0;
overflow: auto;
}
#productListWrapper{
background:transparent;
position:absolute;
z-index:1;
top: 88px;
bottom:49px;
left:0;
width:100%;
overflow:auto;
}
#productsListScroller {
position:absolute; z-index:1;
-webkit-tap-highlight-color:rgba(0,0,0,0);
width:100%;
padding:0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-o-box-sizing: border-box;
box-sizing: border-box;
}
Надеюсь, это поможет!
У меня была та же проблема, и после сладкой полуночной отладки я узнал, что размер моей обертки по какой-то причине изменился, и теперь он намного больше экрана телефона. Я использую мобильный пейджинг jquery и каким-то образом связывался с iScroll. Вот как я это решил:
HTML
<div id="screen" data-role="page">
<div data-role="content">
<div id="list-wrapper">
<ul>
...
</ul>
</div>
</div>
<div data-role="footer">
...
</div>
</div>
JS
// the iScroll should be initialized after the page is visible
// to prevent bug with display:none. If you are not using
// jQuery mobile paging this can be skipped.
$('#screen').on('pageshow', function() {
// calculate the expected height of the real content wrapper and set it
var screenHeight = $('#screen').height();
var footerHeight = $('#screen [data-role="footer"]').height();
var realContentHeight = screenHeight - footerHeight;
$('#list-wrapper').css({'height': realContentHeight + 'px'});
// create or refresh the iScroll after resizing the wrapper
if (myScrollFunction != null ) {
setTimeout(function () {
myScrollFunction .refresh();
}, 100);
} else {
setTimeout(function () {
myScrollFunction = new iScroll('list-wrapper');
}, 100);
}
});