代码拉取完成,页面将自动刷新
(function(global,factory){
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = global || self, global.$ = factory());
}(this,function(){
let $ = function(selector,context){
return new init(selector,context)
}
$.extend = function(isDeep,target){
let args = Array.from(arguments);
if(typeof isDeep != 'boolean'){
return Object.assign.apply(Object,args);
}
let dataMatcher = function(targetVal,value){
let insObj = null;
if(value instanceof RegExp){
insObj = new RegExp(value.source,value.flags)
}else if(value instanceof Date){
insObj = new Date(value);
}else if(value instanceof Array){
insObj = targetVal||[];
}else{
insObj = targetVal||{};
}
return insObj;
}
, deepClone = function(target,obj){
Object.keys(obj).forEach(key=>{
let value = obj[key];
if(typeof value == 'object' && value != null){
let insObj = dataMatcher(target[key],value);
target[key] = deepClone(insObj,value)
}else{
target[key] = value;
}
})
return target;
}
args.slice(2).forEach(obj=>{
deepClone(target,obj);
})
return target;
}
$.each = function(set,callback){
return [].map.call(set,function(el,i){
callback.call(el,el,i)
return el;
})
}
,init = function(selector,context){
if(!selector){return this}
let dataTypes = {
'string':function(){
this.selector = selector;
saveDom.call(this,$(this.context).find(selector))
}
,'object':function(){
saveDom.call(this,selector)
}
,'el':function(){
this[0] = selector
this.length = 1;
}
}
,saveDom = function(nodeList){
Object.assign(this,nodeList)
this.length = nodeList && nodeList.length || 0;
}
this.context = context||document;
dataTypes[selector.nodeType ? 'el' : typeof(selector)].call(this)
return this;
}
,arrayProxy = Object.create(Array.prototype);
$.fn = $.prototype = arrayProxy;
$.extend($.fn,{
constructor:$
,each(callback){
return $($.each(this,callback));
}
,find(selector){
let doms = []
this.each(function(el){
let els = this.querySelectorAll(selector)
doms.push(...els)
})
return $(doms)
}
,evtListener(evtName,callback){
this.each(function(){
this.addEventListener(evtName,callback);
})
}
//因为click有300ms延迟,为了避免这300ms延迟,就模拟一个click,避免这300ms延迟。
//300ms延迟原因:想判断用户是双击屏幕还是单击。当用户第一次单击屏幕时,程序会等待300ms判断用户是否再次单击屏幕,若成立则认为是双击屏幕,放大网页。
,tap(callback){
return this.each(function(el){
let sT,eT,sX,sY,eX,eY;
$(this).evtListener('touchstart',function(e){
//阻止默认行为,如a标签跳转,内容滚动
e.preventDefault();
sT = new Date().getTime();
sX = e.changedTouches[0].pageX;
sY = e.changedTouches[0].pageY;
})
$(this).evtListener('touchend',function(e){
eT = new Date().getTime();
eX = e.changedTouches[0].pageX
eY = e.changedTouches[0].pageY;
//触摸开始到结束的时间间隔小于160毫秒,并且位置移动不超过25
if(eT - sT <= 250 && Math.abs(eX - sX) < 15 && Math.abs(eY - sY) < 15){
callback.call(this,e)
}
})
})
}
,doubleTap(callback){
let curT,prevT;
this.each(function(el){
this.evtListener('touchstart',function(e){
e.preventDefault();
curT = new Date().getTime();
!prevT && (prevT = curT)
if(curT - prevT <= 300 && curT - prevT > 0){
callback.call(this,e);
}
prevT = curT;
})
})
}
})
init.prototype = $.fn;
return $;
}));
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。