`

移动端安卓和IOS开发框架Framework7教程-Picker控件

阅读更多

Picker is a powerful component that allows you to create custom overlay pickers which looks like iOS native picker.

Picker could be used as inline component or as overlay. Overlay Picker will be automatically converted to Popover on tablets (iPad).

Create Picker Instance

Picker can be created and initialized only using JavaScript. We need to use related App's method:

myApp.picker(parameters) - initialize Picker with parameters

  • parameters - object - object with Picker parameters. Required.
  • Method returns initialized Picker instance

For example:

  1. var myPicker = app.picker({
  2.     input: '#picker-input'
  3.     cols: [
  4.        {
  5.          values: ['Apple', 'Orange', 'Bananna']
  6.        }
  7.      ]
  8. });   
  9. myPicker.open(); // open Picker
复制

Picker Parameters

Let's look on list of all available parameters:

Parameter Type Default Description Common Picker Modal Component ParametersSpecific Picker ParametersCallbacks
container string or HTMLElement   String with CSS selector or HTMLElement where to place generated Picker HTML. Use only for inline pickers
input string or HTMLElement   String with CSS selector or HTMLElement with related input element
scrollToInput boolean true Scroll viewport (page-content) to input when picker opened
inputReadOnly boolean true Sets "readonly" attribute on specified input
convertToPopover boolean true Converts picker modal to Popover on large screens (on iPad)
onlyOnPopover boolean false Enable it and Picker will be always opened in Popover
cssClass string   Additional CSS class name to be set on picker modal
toolbar boolean true Enables picker modal toolbar
toolbarCloseText string 'Done' Text for Done/Close toolbar button
toolbarTemplate string   Toolbar HTML Template. By default it is HTML string with following template:
  1. <div class="toolbar">
  2.   <div class="toolbar-inner">
  3.     <div class="left"></div>
  4.     <div class="right">
  5.       <a href="#" class="link close-picker">{{closeText}}</a>
  6.     </div>
  7.   </div>
  8. </div>
复制
 
rotateEffect boolean false Enables 3D rotate effect
momentumRatio number 7 Larger values produces more momentum when you release picker after fast touch and move
updateValuesOnMomentum boolean false Updates picker and input values during momentum
updateValuesOnTouchmove boolean true Updates picker and input values during touch move
value array   Array with initial values. Each array item represents value of related column
formatValue function (p, values, displayValues)   Function to format input value, should return new/formatted string value. valuesand displayValues are arrays where each item represents value/display value of related column
cols array   Array with columns. Each array item represents object with column parameters
onChange function (p, values, displayValues)   Callback function that will be executed when picker value changed. values anddisplayValues are arrays where each item represents value/display value of related column
onOpen function (p)   Callback function that will be executed when picker is opened
onClose function (p)   Callback function that will be executed when picker is closed

Column parameters

When we configure Picker we need to pass cols parameter. It is an array where each item is object with column parameters:

Parameter Type Default Description Callbacks
values array   Array with string columns values
displayValues array   Array with string columns values that will be displayed in Picker. If not specified, it will display values from values parameter
cssClass string   Additional CSS class name to be set on column HTML container
textAlign string   Text alignment of column values, could be "left", "center" or "right"
width number   Column width in px. Useful if you need to fix column widths in picker with dependent columns. By default, calculated automatically
divider boolean false Defines column that should be used as a visual divider, that doesn't have any values
content string   Should be specified for divider-column (divider:true) with content of the column
onChange function (p, value, displayValue)   Callback function that will be executed when column value changed. value anddisplayValue represent current column value and displayValue

Picker Methods & Properties

After we initialize Picker we have its initialized instance in variable (like myPicker variable in example above) with helpful methods and properties:

PropertiesMethods
myPicker.params Object with passed initialization parameters
myPicker.value Array where each item represents current selected value for each column
myPicker.displayValue Array where each item represents current selected display value for each column
myPicker.opened true if Picker is currently opened
myPicker.inline true if Picker is inline Picker
myPicker.cols Array with specified Picker columns. Each column also has its own methods and properties (look below)
myPicker.container Dom7 instance with Picker HTML container
myPicker.setValue(values, duration) Set new picker value. values is array where each item represents value for each column. duration - transition duration in ms
myPicker.open() Open Picker
myPicker.close() Close Picker
myPicker.destroy() Destroy Picker instance and remove all events

Column Methods & Properties

Each column in myPicker.cols array also has its own useful methods and properties.

  1. //Get first column
  2. var col = myPicker.cols[0];
复制
PropertiesMethods
col.container Dom7 instance with column HTML container
col.items Dom7 instance with column items HTML elements
col.value Currently selected column value
col.displayValue Currently selected column display value
col.activeIndex Index number of currently selected/active item
col.setValue(value, duration) Set new value for current column. value is a new value, duration - transition duration in ms
col.replaceValues(values, displayValues) Replace column values and displayValues with new ones

Access to Picker's Instance

If you initialize Picker as inline Picker it is possible to access to Picker's instance from its HTML container

  1. var myPicker = $$('.picker-inline')[0].f7Picker;
复制

Examples

Picker With Single Value

  1. <div class="content-block-title">Picker with single value</div>
  2. <div class="list-block">
  3.   <ul>
  4.     <li>
  5.       <div class="item-content">
  6.         <div class="item-inner">
  7.           <div class="item-input">
  8.             <input type="text" placeholder="Your iOS device" readonly id="picker-device">
  9.           </div>
  10.         </div>
  11.       </div>
  12.     </li>
  13.   </ul>
  14. </div>
复制
  1. var pickerDevice = myApp.picker({
  2.     input: '#picker-device',
  3.     cols: [
  4.         {
  5.             textAlign: 'center',
  6.             values: ['iPhone 4', 'iPhone 4S', 'iPhone 5', 'iPhone 5S', 'iPhone 6', 'iPhone 6 Plus', 'iPad 2', 'iPad Retina', 'iPad Air', 'iPad mini', 'iPad mini 2', 'iPad mini 3']
  7.         }
  8.     ]
  9. });
复制

  实例预览

Two Values and 3D-Rotate Effect

  1. <div class="content-block-title">2 values and 3d-rotate effect</div>
  2. <div class="list-block">
  3.   <ul>
  4.     <li>
  5.       <div class="item-content">
  6.         <div class="item-inner">
  7.           <div class="item-input">
  8.             <input type="text" placeholder="Describe yourself" readonly id="picker-describe">
  9.           </div>
  10.         </div>
  11.       </div>
  12.     </li>
  13.   </ul>
  14. </div>
复制
  1. var pickerDescribe = myApp.picker({
  2.     input: '#picker-describe',
  3.     rotateEffect: true,
  4.     cols: [
  5.         {
  6.             textAlign: 'left',
  7.             values: ('Super Lex Amazing Bat Iron Rocket Lex Cool Beautiful Wonderful Raining Happy Amazing Funny Cool Hot').split(' ')
  8.         },
  9.         {
  10.             values: ('Man Luthor Woman Boy Girl Person Cutie Babe Raccoon').split(' ')
  11.         },
  12.     ]
  13. });
复制

  Dependent Values

  1. <div class="content-block-title">Dependent values</div>
  2. <div class="list-block">
  3.  <ul>
  4.    <li>
  5.      <div class="item-content">
  6.        <div class="item-inner">
  7.          <div class="item-input">
  8.            <input type="text" placeholder="Your car" readonly id="picker-dependent">
  9.          </div>
  10.        </div>
  11.      </div>
  12.    </li>
  13.  </ul>
  14. </div>
复制
  1.          var carVendors = {
  2.     Japanese : ['Honda', 'Lexus', 'Mazda', 'Nissan', 'Toyota'],
  3.     German : ['Audi', 'BMW', 'Mercedes', 'Volkswagen', 'Volvo'],
  4.     American : ['Cadillac', 'Chrysler', 'Dodge', 'Ford']
  5. };
  6. var pickerDependent = myApp.picker({
  7.     input: '#picker-dependent',
  8.     rotateEffect: true,
  9.     formatValue: function (picker, values) {
  10.         return values[1];
  11.     },
  12.     cols: [
  13.         {
  14.             textAlign: 'left',
  15.             values: ['Japanese', 'German', 'American'],
  16.             onChange: function (picker, country) {
  17.                 if(picker.cols[1].replaceValues){
  18.                     picker.cols[1].replaceValues(carVendors[country]);
  19.                 }
  20.             }
  21.         },
  22.         {
  23.             values: carVendors.Japanese,
  24.             width: 160,
  25.         },
  26.     ]
  27. });
复制

Custom toolbar

  1. <div class="content-block-title">Custom toolbar</div>
  2. <div class="list-block">
  3.  <ul>
  4.    <li>
  5.      <div class="item-content">
  6.        <div class="item-inner">
  7.          <div class="item-input">
  8.            <input type="text" placeholder="Describe yourself" readonly id="picker-custom-toolbar">
  9.          </div>
  10.        </div>
  11.      </div>
  12.    </li>
  13.  </ul>
  14. </div>
复制
  1. var pickerCustomToolbar = myApp.picker({
  2.     input: '#picker-custom-toolbar',
  3.     rotateEffect: true,
  4.     toolbarTemplate: 
  5.         '<div class="toolbar">' +
  6.             '<div class="toolbar-inner">' +
  7.                 '<div class="left">' +
  8.                     '<a href="#" class="link toolbar-randomize-link">Randomize</a>' +
  9.                 '</div>' +
  10.                 '<div class="right">' +
  11.                     '<a href="#" class="link close-picker">That\'s me</a>' +
  12.                 '</div>' +
  13.             '</div>' +
  14.         '</div>',
  15.     cols: [
  16.         {
  17.             values: ['Mr', 'Ms'],
  18.         },
  19.         {
  20.             textAlign: 'left',
  21.             values: ('Super Lex Amazing Bat Iron Rocket Lex Cool Beautiful Wonderful Raining Happy Amazing Funny Cool Hot').split(' ')
  22.         },
  23.         {
  24.             values: ('Man Luthor Woman Boy Girl Person Cutie Babe Raccoon').split(' ')
  25.         },
  26.     ],
  27.     onOpen: function (picker) {
  28.         picker.container.find('.toolbar-randomize-link').on('click', function () {
  29.             var col0Values = picker.cols[0].values;
  30.             var col0Random = col0Values[Math.floor(Math.random() * col0Values.length)];
  31.  
  32.             var col1Values = picker.cols[1].values;
  33.             var col1Random = col1Values[Math.floor(Math.random() * col1Values.length)];
  34.  
  35.             var col2Values = picker.cols[2].values;
  36.             var col2Random = col2Values[Math.floor(Math.random() * col2Values.length)];
  37.  
  38.             picker.setValue([col0Random, col1Random, col2Random]);
  39.         });
  40.     }
  41. });
复制

  Inline Picker / Date-time

  1. <div class="content-block-title">Inline Picker / Date-time</div>
  2. <div class="content-block">
  3.  <div style="padding:0; margin-right:-15px; width:auto" class="content-block-inner">
  4.    <div style="margin:0" class="list-block">
  5.      <ul style="border-top:none">
  6.        <li>
  7.          <div class="item-content">
  8.            <div class="item-inner">
  9.              <div class="item-input">
  10.                <input type="text" placeholder="Date Time" readonly id="picker-date">
  11.              </div>
  12.            </div>
  13.          </div>
  14.        </li>
  15.      </ul>
  16.    </div>
  17.    <div id="picker-date-container"></div>
  18.  </div>
  19. </div>
复制
  1. var today = new Date();
  2.  
  3. var pickerInline = myApp.picker({
  4.     input: '#picker-date',
  5.     container: '#picker-date-container',
  6.     toolbar: false,
  7.     rotateEffect: true,
  8.  
  9.     value: [today.getMonth(), today.getDate(), today.getFullYear(), today.getHours(), (today.getMinutes()  daysInMonth) {
  10.             picker.cols[1].setValue(daysInMonth);
  11.         }
  12.     },
  13.  
  14.     formatValue: function (p, values, displayValues) {
  15.         return displayValues[0] + ' ' + values[1] + ', ' + values[2] + ' ' + values[3] + ':' + values[4];
  16.     },
  17.  
  18.     cols: [
  19.         // Months
  20.         {
  21.             values: ('0 1 2 3 4 5 6 7 8 9 10 11').split(' '),
  22.             displayValues: ('January February March April May June July August September October November December').split(' '),
  23.             textAlign: 'left'
  24.         },
  25.         // Days
  26.         {
  27.             values: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],
  28.         },
  29.         // Years
  30.         {
  31.             values: (function () {
  32.                 var arr = [];
  33.                 for (var i = 1950; i
复制

 

1
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    datetime Picker控件

    为了方便用户输入或选择日期时间信息,许多编程语言和开发框架提供了专用的日期时间选择器组件,其中 `datetime Picker` 控件就是一个非常实用且广泛使用的工具。 #### 二、基本概念 `datetime Picker` 控件是一种...

    史上最全的ios开发源码

    苹果iOS是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上。iOS与苹果的Mac OS X...

    ios7版 30天精通iPhone手机编程

    iOS7的开发基础是学习iPhone编程的起点,涵盖了各种模板、基本框架和控件的使用。以下是对各个知识点的详细解释: 1. **项目程序模板**: - **Master-Detail Application**:适用于构建具有层次结构的导航应用,...

    Flutter实战6565464

    7. `plugin`:插件开发,涵盖了如何使用和开发Flutter插件,以实现与原生平台的交互,如获取设备信息、调用系统相机等。 8. `package`:第三方库的使用,如图片加载库image_picker、地图库google_maps_flutter等。 ...

    xamarin-forms-samples-master.zip

    Xamarin.Forms,作为微软跨平台移动开发框架的重要组成部分,允许开发者使用C#和.NET Framework编写一次代码,即可在iOS、Android以及Windows平台上运行。这个名为"xamarin-forms-samples-master.zip"的压缩包,显然...

    WheelPicker样本:WheelPicker Xamarin组件的WheelPicker样本

    Xamarin 是一个强大的跨平台移动开发框架,它允许开发者使用 C# 语言和 .NET Framework 来构建原生的 iOS、Android 和 Windows 应用程序。在 Xamarin.Forms 中,我们可以找到各种组件来构建用户界面,其中 `...

Global site tag (gtag.js) - Google Analytics