npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

jmslip

v1.0.5

Published

h5滑动组件

Downloads

11

Readme

jmSlip/slip.js

一个简单的WEB前端滑动组件

主页:http://jiamao.github.io/jmSlip/

开始

<script src="../../src/jmSlip.js"></script>
<section class="banner js-banner" id="banner">
	<ul>
	<li></li>
	</ul>
</section>
<script>
	var banner = 'banner'; //$('.js-banner');  //可以是id或jquery对象或原生node
	var slip = new jmSlip(banner,'page', {
		direction: 'x',
		repeat: true //这里用平铺
	});
	//窗口改变
    window.onresize = function(){
	    slip.reset();
    };
</script>

参数

  1. element 当前组件控制的dom容器。可以是id、jquery对象或原生node对象。
  2. type 滑动方式,pagescaledrag等。
  3. option 滑动参数。格式
{
    "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)

按页切换

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中止
	});
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

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<len;i++) {		
			var itemw = this.instance.containerInner.children[i].offsetWidth; 			
			leftwidth += itemw;
			var c = leftwidth - itemw / 2;
			if(c >= 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

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 + '<br />');
        }
    });

拖放(drag)

拖放对象,可以做一些贴边操作 示例:https://jiamao.github.io/jmSlip/demo/drag/index.html

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/scroll_item.html