(function (window) {
function Scroller(options) {
options = Object.assign({}, Scroller.defaultOptions, options);
this.options = options;
this.parentNode = document.getElementsByClassName(options.parentNode)[0];
this.ulNode = document.getElementsByClassName(options.ulNode)[0];
this.itemNodes = document.getElementsByClassName(options.itemNodes);
this.init();
}
Scroller.prototype = {
constructor: Scroller,
init: function () {
debugger;
this.scrollLeft = 0;
this.parentWidth = this.parentNode.offsetWidth;
this.ulWidth = 0;
//修改长度
for(let i = 0, len = this.itemNodes.length; i < len; i ++) {
this.ulWidth += this.itemNodes[i].offsetWidth;
}
//记录样式
this.style = `width:${this.ulWidth}px; display: flex;justify-content: flex-start;`
this.ulNode.style = this.style;
this.bindEvent(this.ulNode,"click", this.switchHandler);
},
switchHandler: function (e) {
let index = e.target.dataset.index;
this.ativeClassHandle(index);
this.removeHandle(index);
},
removeHandle: function (index) {
//获取一个元素长度
let itemWidth = this.itemNodes[0].offsetWidth;
//获取index内总长度
let widthTotal = 0;
for(i = 0; i <= index; i ++) {
widthTotal += itemWidth;
}
console.log(widthTotal,itemWidth / 2, 1100/2);
if(widthTotal - itemWidth / 2 > this.parentWidth / 2 ) {
this.scrollLeft = widthTotal - itemWidth / 2 - this.parentWidth / 2;
}else {
this.scrollLeft = 0;
}
//边界处理
if(this.scrollLeft > this.ulWidth - this.parentWidth) {
return;
}
this.ulNode.style = this.style + `transition: all ${this.options.time}s; transform: translateX(-${this.scrollLeft}px);`
},
//自定义处理选中样式
ativeClassHandle: function (index) {
},
bindEvent: function(node,event,cb) {
node.addEventListener(event, function(e) {
cb && cb.call(this,e);
}.bind(this), false)
}
}
Scroller.defaultOptions = {
parentNode: null,
ulNode: null,
itemNodes: null,
time: 0.3,
ativeClass: null
}
window.Scoller = Scroller;
})(window)
js封装tab可滑动到中间位置
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.获取dom元素 2.dom元素的属性 3.获取元素到页面顶部的距离,原生js只能获取相对于父级的top值,所以...
- 场景:当前项目是一个嵌在服务号里的H5 首页比较长 采用的技术栈是nextjs 需求:要求从首页离开 跳转到其他页...
- 2016年11月04日 21:55:04 csdn读完这篇博客可以实现:1.scrollview从任意位置通过惯性...
- 1. 解决ViewPager切换时(如首页tab切换)页面自动跳到recyclerView的位置的BUG 解决方案...