h5-cli
Version:
hello
133 lines (114 loc) • 3.49 kB
JavaScript
"use strict";
/**
slide
element \u5bb9\u5668
itemWidth \u5355\u4e2aslide\u7684\u5bbd\u5ea6
*/
define("mods/slide/slide", function (require, exports, module) {
var Hammer = require("libs/hammer");
function Slide(opt) {
// this.opt = opt;
this.element = opt.element;
this.items = opt.items;
this.itemWidth = opt.itemWidth;
this.itemCount = opt.itemCount;
this.loop = true;
this.currentIndex = 0;
this.init();
};
Slide.prototype = {
construcotr: Slide,
init: function init() {
var self = this;
var hammertime = new Hammer(this.element, { direction: Hammer.DIRECTION_HORIZONTAL });
var startX = 0;
var itemWidth = this.itemWidth;
//\u963b\u6b62\u9875\u9762\u4e0a\u4e0b\u6eda\u52a8
// document.body.addEventListener("touchmove", function(e){
// e.preventDefault();
// });
hammertime.on('panstart', function (ev) {
ev.preventDefault();
$(self.element).removeClass("animation");
});
hammertime.on('panmove', function (ev) {
ev.preventDefault();
self.transform(self.calculationTransfromX() + ev.deltaX * (1 - Math.abs(ev.deltaX) / (itemWidth * 3)));
});
hammertime.on('panend', function (ev) {
// console.log(ev);
/**
DIRECTION_NONE 1
DIRECTION_LEFT 2 ++
DIRECTION_RIGHT 4 --
DIRECTION_UP 8
DIRECTION_DOWN 16
DIRECTION_HORIZONTAL 6
DIRECTION_VERTICAL 24
DIRECTION_ALL 30
*/
$(self.element).addClass("animation");
var dir = ev.direction;
var deltaX = Math.abs(ev.deltaX);
var velocityX = Math.abs(ev.velocityX);
// console.log("next", deltaX, self.itemWidth/2 , velocityX, dir)
if (deltaX > self.itemWidth / 3 || velocityX > 0.3) {
// console.log(ev.deltaX)
if (ev.deltaX < 0) {
// console.log("next", ev.deltaX, ev.velocityX)
self.switchToNext();
}
if (ev.deltaX > 0) {
// console.log("prev", ev.deltaX, ev.velocityX)
self.switchToPrev();
}
} else {
self.switchToIndex(self.currentIndex);
}
self.autoSwitch();
});
// hammertime.get('panmove').set({ direction: Hammer.DIRECTION_HORIZONTAL });
},
transform: function transform(deltaX) {
// console.log( deltaX )
//this.element.style.WebkitTransform = "translate3d("+ deltaX +"px,0,0)";
this.element.style.WebkitTransform = "translate(" + deltaX + "px)";
this.clearAutoSwitch();
},
switchToPrev: function switchToPrev() {
var index = --this.currentIndex;
index = index >= 0 ? index : 0;
this.switchToIndex(index);
},
switchToNext: function switchToNext() {
var index = ++this.currentIndex;
// console.log(index)
index = index < this.itemCount ? index : this.itemCount;
this.switchToIndex(index);
},
switchToIndex: function switchToIndex(index) {
this.currentIndex = index != undefined ? index : this.currentIndex;
this.transform(this.calculationTransfromX());
this.onChange(this.currentIndex);
},
calculationTransfromX: function calculationTransfromX() {
return -this.itemWidth * this.currentIndex;
},
clearAutoSwitch: function clearAutoSwitch() {
this.interval && clearInterval(this.interval);
},
autoSwitch: function autoSwitch() {
var self = this;
this.clearAutoSwitch();
this.interval = setInterval(function () {
if (self.currentIndex < self.itemCount) {
self.switchToNext();
} else {
self.switchToIndex(0);
}
}, 5000);
},
onChange: function onChange(index) {}
};
module.exports = Slide;
});