# jmSlip
**Repository Path**: fefeding/jmSlip
## Basic Information
- **Project Name**: jmSlip
- **Description**: 一个简易的WEB前端滑动组件(slip/js)
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-06-01
- **Last Updated**: 2021-09-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
jmSlip/slip.js
=========
一个简单的WEB前端滑动组件
主页:[http://jiamao.github.io/jmSlip/](http://jiamao.github.io/jmSlip/)
开始
---
```html
```
### 参数
1. `element` 当前组件控制的dom容器。可以是id、jquery对象或原生node对象。
2. `type` 滑动方式,`page`、`scale`、`drag`等。
3. `option` 滑动参数。格式
```javascript
{
"direction": 'x', //type为page时有效。x:横向滑动,y:纵向滑动
"onPageStart": function(page){
},
//翻页结束后执行
"onPageEnd" : function(oldpage, newpage){},
//滑动开始事件
"onTouchStart": function(e){
//return false 阻止
},
//滑动中
"onTouchMove": function(e, offset){
//return false 阻止
//offset: {offx:0,offy:0} 移动距离
},
//结束滑动
"onTouchEnd": function(e, offset) {
//return false 阻止
//offset: {offx:0,offy:0} 移动距离
}
}
```
## 翻页(page)
按页切换
* 横向翻页:[http://jiamao.github.io/jmSlip/demo/page/x.html](http://jiamao.github.io/jmSlip/demo/page/x.html)
```javascript
var slip = new jmSlip(banner1,'page',{
//changeTime: 1000,
direction: 'x',
repeat: false,
//是否循环切换,如果为true,当滑到最后一页后依然会从第一页开始向后滑。如果设为true,最好把repeat也指定为false
loop: true,
mousewheel:true,//支持滚轮
onPageStart: function(page) {
console.log(page);
//if(page > 2) return false; //可按条件阻断翻页
}, //翻页开始前回调,如果返回false则翻页中止
onPageEnd: function(oldpage, newpage){
console.log(oldpage);
console.log(newpage);
} ,//翻页结束回调
onTouchStart: function(evt){
console.log(evt);
}, //滑动开始,返回false中止滑动
onTouchMove: function(evt, offset){
evt.preventDefault();
console.log(evt);
console.log(offset);//相对于start的位移
}, //滑动中,返回false中止
onTouchEnd: function(evt){
console.log(evt);
} //滑动结束,返回false中止
});
```
* 纵向翻页 [http://jiamao.github.io/jmSlip/demo/page/y.html](http://jiamao.github.io/jmSlip/demo/page/y.html)
```javascript
var slip = new jmSlip('wrap','page',{
changeTime: 0,
//是否循环切换,如果为true,当滑到最后一页后依然会从第一页开始向后滑。如果设为true,最好把repeat也指定为false
loop: true,
mousewheel:true, //支持滚轮
onPageStart: function(page) {
console.log(page);
}, //翻页开始前回调,如果返回false则翻页中止
onPageEnd: function(oldpage, newpage){
console.log(oldpage);
console.log(newpage);
} ,//翻页结束回调
onTouchStart: function(evt){
console.log(evt);
}, //滑动开始,返回false中止滑动
onTouchMove: function(evt, offset){
evt.preventDefault();
console.log(evt);
console.log(offset);//相对于start的位移
}, //滑动中,返回false中止
onTouchEnd: function(evt){
console.log(evt);
} //滑动结束,返回false中止
});
```
## 滚动选中(item)
一排滚动,中心位被选中效果。
示例:[http://jiamao.github.io/jmSlip/demo/item/index.html](http://jiamao.github.io/jmSlip/demo/item/index.html)
```javascript
var slip = new jmSlip('banner','item',{
//changeTime: 1500,
direction: 'x',
page: 0, //默认所在项
duration: 800, //滚动延时
itemOffWidth: 1, //每个项需要计算的偏移量。一般用作间距
onTouchStart: function(){
//$('#banner li.cur').toggleClass('cur',false);
},
onTouchMove: function(evt, offset) {
evt.preventDefault();
//找到中间项,然后让它滑过中间时放大
var len = this.instance.containerInner.children.length;
var leftwidth = 0;
var lastoffx = 0;
var lastindex = 0;
var mleft = this.instance.container.offsetWidth / 2 - this.offsetX;
//找到离中间最近的项
for(var i=0;i= mleft) {
var curoffx = Math.abs(c - mleft);
if(lastindex != i) {
var sc = Math.max((1-lastoffx / itemw),0) * 0.2 + 0.8;
$('#banner li').eq(lastindex).css('transform', 'scale3d('+sc+', '+sc+', 1)');
}
var sc = Math.max((1 - curoffx / itemw),0) * 0.2 + 0.8;
$('#banner li').eq(i).css('transform', 'scale3d('+sc+', '+sc+', 1)');
break;
}
//离项中间的距离
lastoffx = Math.abs(mleft - c);
lastindex = i;
}
},
onPageStart: function(p) {
//限制这跳到第三个项,超过注返回第三个
/*if(p > 2) {
this.go(2);
return false;
}*/
},
onPageEnd: function(oldPage,newPage) {
setTimeout(function(){
$('#banner li.cur').toggleClass('cur',false);
$('#banner li').eq(newPage).toggleClass('cur',true);
},100);
}
});
```
## 缩放(scale)
主要用于图片的缩放操作
示例:[https://jiamao.github.io/jmSlip/demo/scale/index.html](https://jiamao.github.io/jmSlip/demo/scale/index.html)
```javascript
var slip = new jmSlip(container, 'scale', {
target: container.find('img')[0], //被操作的img对象
supportTranslate: true,//是否支持移动
maxScale: 4, //最大放大4倍
minScale: 0.1, //最小缩小到10%
onTouchMove: function(e){
//if(e.offsetPos.length == 2)container.append(JSON.stringify(e.offsetPos));
},
onScaleStart: function(per, e) {
container.append('scale:' + per + '
');
}
});
```
## 拖放(drag)
拖放对象,可以做一些贴边操作
示例:[https://jiamao.github.io/jmSlip/demo/drag/index.html](https://jiamao.github.io/jmSlip/demo/drag/index.html)
```javascript
var entry = $('.act-enter');
var slip = new jmSlip(entry,'drag', {
onTouchStart: function(e){
e && e.preventDefault && e.preventDefault();//阻止默认响应
},
dragEnd: function() {
var offx = this.offsetX;//当前偏移量
var offy = this.offsetY;
var posw = entry.offset().left + entry.width() / 2;
var winw = $(window).width();
//如果偏左的话,则定到左侧
if(posw <= winw / 2) {
offx -= entry.offset().left;
}
else {
offx += winw - posw - entry.width() / 2;
}
//粘到左右边上
this.move(offx, offy);
}
});
```
## 滚动(scroll)
跟原生滚动条类似
示例:[http://jiamao.github.io/jmSlip/demo/scroll/index.html](http://jiamao.github.io/jmSlip/demo/scroll/index.html)
列表操作项:[http://jiamao.github.io/jmSlip/demo/scroll/scroll_item.html](http://jiamao.github.io/jmSlip/demo/scroll/scroll_item.html)