AlloyTouch之无限循环select插件

写在前面

当滚动的内容不少,好比闹钟里设置秒,一共有60项。让使用者从59ms滚回01ms是一件很痛苦的事情,因此:
在列表项太多的状况下,咱们但愿可以有个无限循环的滚动。00ms和01ms是无缝连接起来的。以下图所示:css

在线演示

alloyteam.github.io/AlloyTouch/…前端

插件使用

先引用依赖的JS和CSS文件。git

<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>复制代码

而后:github

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里面的属性变化。微信

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 设置其垂直方向上的位移。frontend

总结

由于不是旋转360自动会处理周期,咱们本身经过运动对象字面量{y:xx},而后经过correction映射到滚动对象的translateY来控制周期性。
后续还会给你们带来:dom

  • AlloyTouch多项级联select实战
  • AlloyTouch实现3D效果select实战

Github

github.com/AlloyTeam/A…学习

你要触摸的一切都在这里。spa


本文对你有帮助?欢迎扫码加入前端学习小组微信群:插件

相关文章
相关标签/搜索