Framework7 Virtuallist Height
by Maiki Nahara
HTML
<script src="http://framework7.io/fonts/Framework7Icons-Regular.eot"></script>
<script src="http://framework7.io/fonts/Framework7Icons-Regular.ttf"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/framework7/5.4.5/css/framework7.bundle.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/framework7/5.4.5/css/framework7.css">
<link rel="stylesheet" href="http://framework7.io/css/framework7-icons.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/framework7/5.4.5/js/framework7.bundle.js"></script>
<head>
<!-- Required meta tags-->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui, viewport-fit=cover">
<meta name="apple-mobile-web-app-capable" content="yes">
<!-- Color theme for statusbar (Android only) -->
<meta name="theme-color" content="#2196f3">
<!-- Your app title -->
<title>My App</title>
<!-- Path to Framework7 Library Bundle CSS -->
</head>
<body>
<!-- App root element -->
<div id="app">
<!-- Your main view, should have "view-main" class -->
<div class="view view-main">
<!-- Initial Page, "data-name" contains page name -->
<div data-name="home" class="page">
<!-- Top Navbar -->
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title">Awesome App</div>
</div>
</div>
<!-- Bottom Toolbar -->
<div class="toolbar toolbar-bottom">
<div class="toolbar-inner">
<!-- Toolbar links -->
<a href="#" class="link">Link 1</a>
<a href="#" class="link">Link 2</a>
</div>
</div>
<!-- Scrollable page content -->
<div class="page-content ptr-content" data-ptr-mousewheel="true">
<!-- Virtual List -->
<div class="list virtual-list">
<!-- keep it...
CSS
.demolist {
margin-top: 0px;
}
JavaScript
var app = new Framework7({
// App root element
root: '#app',
// App Name
name: 'Pull To Refresh Demo',
// App id
id: 'com.myapp.test',
// Enable swipe panel
panel: {
swipe: 'left',
},
theme: 'ios',
// Add default routes
routes: [{
path: '/about/',
url: 'about.html',
}, ],
// ... other parameters
});
var $$ = Dom7;
var mainView = app.views.create('.view-main');
var items = [];
for (var i = 1; i <= 10; i++) {
items.push({
title: 'Item ' + i,
subtitle: 'Subtitle ' + i,
IMAGESIZE : Math.floor(Math.random() * 31) + 90,
});
}
var virtualList = app.virtualList.create({
el: '.virtual-list',
items: items,
searchAll: function (query, items) {
var found = [];
for (var i = 0; i < items.length; i++) {
if (items[i].title.toLowerCase().indexOf(query.toLowerCase()) >= 0 || query.trim() === '') found.push(i);
}
return found; //return array with mathced indexes
},
itemTemplate:
'<li>' +
'<a href="#" class="item-link item-content">' +
'<div class="item-media"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAMLCwgAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" height="{{IMAGESIZE}}"/></div>' +
'<div class="item-inner">' +
'<div class="item-title-row">' +
'<div class="item-title">{{title}}</div>' +
'</div>' +
'<div class="item-subtitle">{{subtitle}}</div>' +
'</div></a></li>' +
'<li>',
height: function (item) {
let childNo = 0
return app.virtualList.get( '.virtual-list' ).$itemsWrapEl.children().length ? app.virtualList.get( '.virtual-list' ).$itemsWrapEl.children()[ childNo ].offsetHeight : item.IMAGESIZE + 16;
}
});