首頁  >  文章  >  web前端  >  AlloyTouch無限循環select插件

AlloyTouch無限循環select插件

PHPz
PHPz原創
2017-03-12 16:01:061199瀏覽

寫在前面

當滾動的內容很多,例如鬧鐘裡設定秒,一共有60項。讓使用者從59ms滾回01ms是一件很痛苦的事情,所以:
在列表項目太多的情況下,我們希望能夠有個無限循環的滾動。 00ms和01ms是無縫連結起來的。如下圖所示:

AlloyTouch無限循環select插件

線上示範

AlloyTouch無限循環select插件

#http://www.php.cn/

外掛程式使用

引用依賴的JS和CSS檔案。


<link rel="stylesheet" href="select.css" /><script src="../../transformjs/transform.js"></script><script src="../../alloy_touch.js"></script><script src="alloy_touch.select.infinite.js"></script>

然後:


#
var i = 0, options = [];for (; i < 60; i++) {
    options.push({ value: i, text: i < 10 ? "0" + i+" ms" : i + " ms" });}var iselect = new AlloyTouch.Select({
    options: options,
    selectedIndex: 11,
    change: function (item, index) {

    },
    complete: function (item, index) {
        document.body.insertAdjacentHTML("beforeEnd", "<br/>选了第" + index + "项<br/>value:" + item.value + "<br/>text:" + item.text);
    }})iselect.show();
  • options是所有項目的集合。上面模擬了60項代表對應的ms

  • selectedIndex是初始選取項目的索引

  • ##change是改變的回呼

  • complete是點擊完成

    按鈕的回呼

核心原理

在看原理之前,我們看下dom裡面的

屬性變化。

AlloyTouch無限循環select插件


new AlloyTouch({
    touch: container,
    target: { y: -1 * preSelectedIndex * step },
    property: "y",
    vertical: true,
    step: step,
    change: function (value) {
        correction(value);
    },
    touchStart: function (evt, value) { },
    touchMove: function (evt, value) { },
    touchEnd: function (evt, value) { },
    tap: function (evt, value) { },
    pressMove: function (evt, value) { },
    animationEnd: function (value) { }})function correction(value) {
    value %= scrollerHeight;
    if (Math.abs(value) > scrollerHeight-90) {
        if (value > 0) {
            value -= scrollerHeight;
        } else {
            value += scrollerHeight;
        }
    }
    scroll.translateY = value - scrollerHeight;}

可以看到初始化AlloyTouch實例的時候已經不存在min和max的參數,因為不需要回彈。

透過correction去產生跳動週期的效果。 (注意:雖然值會跳一個週期,但是dom的渲染表現是看不出跳動的)
其中target是一個包含y屬性的
物件字面量,scroll是滾動的對象,被mix過transfrom的相關屬性,所以可以直接透過scroll.translateY 設定其垂直方向上的位移。

總結

因為不是旋轉360自動會處理週期,我們自己透過運動物件字面量{y:xx},然後透過correction映射到滾動物件的translateY來控制週期性。

後續還會帶給大家:

  • AlloyTouch多項級聯select實戰

  • AlloyTouch實作3D效果select實戰

以上是AlloyTouch無限循環select插件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn