美文网首页
原生jsDom操作部分封装

原生jsDom操作部分封装

作者: 翌凌枫 | 来源:发表于2019-04-20 10:41 被阅读0次
// JavaScript Document
function id(obj) {
    return document.getElementById(obj);
}
function bind(obj, ev, fn) { 
    if (obj.addEventListener) {
        obj.addEventListener(ev, fn, false);
    } else {
        obj.attachEvent('on' + ev, function() {
            fn.call(obj);
        });
    }
}
function view() {
    return {
        w: document.documentElement.clientWidth,
        h: document.documentElement.clientHeight
    };
}
function addClass(obj, sClass) { 
    var aClass = obj.className.split(' ');
    if (!obj.className) {
        obj.className = sClass;
        return;
    }
    for (var i = 0; i < aClass.length; i++) {
        if (aClass[i] === sClass) return;
    }
    obj.className += ' ' + sClass;
}

function removeClass(obj, sClass) { 
    var aClass = obj.className.split(' ');
    if (!obj.className) return;
    for (var i = 0; i < aClass.length; i++) {
        if (aClass[i] === sClass) {
            aClass.splice(i, 1);
            obj.className = aClass.join(' ');
            break;
        }
    }
}

function fnLoad()
{
    var iTime=new Date().getTime();
    var oW=id("welcome");
    var arr=[""];
    var bImgLoad=true;
    var bTime=false;
    var oTimer=0;
    bind(oW,"webkitTransitionEnd",end);
    bind(oW,"transitionend",end);
    oTimer=setInterval(function(){
        if(new Date().getTime()-iTime>=5000)
        {
            bTime=true;
        }    
        if(bImgLoad&&bTime)
        {
            clearInterval(oTimer);
            oW.style.opacity=0;
        }
    },1000);
    function end()
    {
        removeClass(oW,"pageShow");
        fnTab();
    }
    /*for(var i=0;i<arr.length;i++)
    {
        var oImg=new Image();
        oImg.src=arr[i];
        oImg.onload=function()
        {
            
        }
        
    }*/
}

function fnTab()
{
    var oTab=id("tabPic");
    var oList=id("picList");
    var aNav=oTab.getElementsByTagName("nav")[0].children;
    var iNow=0;
    var iX=0;
    var iW=view().w;
    var oTimer=0;
    var iStartTouchX=0;
    var iStartX=0;
    bind(oTab,"touchstart",fnStart);
    bind(oTab,"touchmove",fnMove);
    bind(oTab,"touchend",fnEnd);
    auto();
    if(!window.BfnScore)
    {
        fnScore();
        window.BfnScore=true;
    }
    function auto()
    {
        oTimer=setInterval(function(){
            iNow++;    
            iNow=iNow%aNav.length;
            tab();
        },2000);
    }
    function fnStart(ev)
    {
        oList.style.transition="none";
        ev=ev.changedTouches[0];
        iStartTouchX=ev.pageX;
        iStartX=iX;
        clearInterval(oTimer);
    }
    function fnMove(ev)
    {
        ev=ev.changedTouches[0];
        var iDis=ev.pageX-iStartTouchX;
        iX=iStartX+iDis;
        oList.style.WebkitTransform=oList.style.transform="translateX("+iX+"px)";
    }
    function fnEnd()
    {
        iNow=iX/iW;
        iNow=-Math.round(iNow);
        if(iNow<0)
        {
            iNow=0;
        }
        if(iNow>aNav.length-1)
        {
            iNow=aNav.length-1;
        }
        tab();
        auto();
    }
    function tab()
    {
        iX=-iNow*iW;
        oList.style.transition="0.5s";
        oList.style.WebkitTransform=oList.style.transform="translateX("+iX+"px)";
        for(var i=0;i<aNav.length;i++)
        {
            removeClass(aNav[i],"active");
        }
        addClass(aNav[iNow],"active");
    }
}
function fnScore()
{
    var oScore=id("score");
    var aLi=oScore.getElementsByTagName("li");
    var arr=["好失望","没有想象的那么差","很一般","良好","棒极了"];
    for(var i=0;i<aLi.length;i++)
    {
        fn(aLi[i]);
    }
    function fn(oLi)
    {
        var aNav=oLi.getElementsByTagName("a");
        var oInput=oLi.getElementsByTagName("input")[0];
        for(var i=0;i<aNav.length;i++)
        {
            aNav[i].index=i;
            bind(aNav[i],"touchstart",function(){
                for(var i=0;i<aNav.length;i++)
                {
                    if(i<=this.index)
                    {
                        addClass(aNav[i],"active");
                    }                    
                    else
                    {
                        removeClass(aNav[i],"active");
                    }
                }
                oInput.value=arr[this.index];
            });
        }
    }

    fnIndex();
}
function fnInfo(oInfo,sInfo)
{
    oInfo.innerHTML=sInfo;
    oInfo.style.WebkitTransform="scale(1)";
    oInfo.style.opacity=1;
    setTimeout(function(){
        oInfo.style.WebkitTransform="scale(0)";
        oInfo.style.opacity=0;
    },1000);
}
function fnIndex()
{
    var oIndex=id("index");
    var oBtn=oIndex.getElementsByClassName("btn")[0];
    var oInfo=oIndex.getElementsByClassName("info")[0];
    var bScore=false;
    bind(oBtn,"touchend",fnEnd);
    function fnEnd()
    {
        bScore=fnScoreChecked();
        if(bScore)
        {
            if(bTag())
            {
                fnIndexOut();        
            }
            else
            {
                fnInfo(oInfo,"给景区添加标签");    
            }
        }
        else
        {
            fnInfo(oInfo,"给景区评分");
        }
    }
    function fnScoreChecked()
    {
        var oScore=id("score");
        var aInput=oScore.getElementsByTagName("input");
        for(var i=0;i<aInput.length;i++)
        {
            if(aInput[i].value==0)
            {
                return false;
            }
        }
        return true;
    }
    function bTag()
    {
        var oTag=id("indexTag");
        var aInput=oTag.getElementsByTagName("input");
        for(var i=0;i<aInput.length;i++)
        {
            if(aInput[i].checked)
            {
                return true;
            }
        }
        return false;
    }
}
function fnIndexOut()
{
    var oMask=id("mask");
    var oIndex=id("index");
    var oNew=id("news");
    addClass(oMask,"pageShow");
    addClass(oNew,"pageShow");
        fnNews();
    setTimeout(function(){
        oMask.style.opacity=1;    
        oIndex.style.WebkitFilter=oIndex.style.filter="blur(5px)";
    },14);
    setTimeout(function(){
        oNew.style.transition="0.5s";
        oMask.style.opacity=0;    
        oIndex.style.WebkitFilter=oIndex.style.filter="blur(0px)";    
        oNew.style.opacity=1;
        removeClass(oMask,"pageShow");
    },3000);
}
function fnNews()
{
    var oNews=id("news");
    var oInfo=oNews.getElementsByClassName("info")[0];
    var aInput=oNews.getElementsByTagName("input");
    aInput[0].onchange=function()
    {
        if(this.files[0].type.split("/")[0]=="video")
        {
            fnNewsOut();
            this.value="";
        }
        else
        {
            fnInfo(oInfo,"请上传视频");
        }
    };
    aInput[1].onchange=function()
    {
        if(this.files[0].type.split("/")[0]=="image")
        {
            fnNewsOut();
            this.value="";
        }
        else
        {
            fnInfo(oInfo,"请上传图片");
        }
    };
}
function fnNewsOut()
{
    var oNews=id("news");
    var oForm=id("form");
    addClass(oForm,"pageShow");
    oNews.style.cssText="";
    removeClass(oNews,"pageShow");
        formIn();
}
function formIn()
{
    var oForm=id("form");
    var oOver=id("over");
    var aFormTag=id("formTag").getElementsByTagName("label");
    var oBtn=oForm.getElementsByClassName("btn")[0];
    var bOff=false;
    for(var i=0;i<aFormTag.length;i++)
    {
        bind(aFormTag[i],"touchend",function(){
            bOff=true;
            addClass(oBtn,"submit");
        });
    }
    bind(oBtn,"touchend",function(){
        if(bOff)
        {
            for(var i=0;i<aFormTag.length;i++)
            {
                aFormTag[i].getElementsByTagName("input")[0].checked=false;
            }
            bOff=false;
            addClass(oOver,"pageShow");
            removeClass(oForm,"pageShow");
            removeClass(oBtn,"submit");
            over();
        }
    });
}
function over()
{
    var oOver=id("over");
    var oBtn=oOver.getElementsByClassName("btn")[0];
    bind(oBtn,"touchend",function()
    {
        removeClass(oOver,"pageShow");
    });
}
var utils = (function(window) {

    var flag = "getComputedStyle" in window;

    function win(attr, value) {
        if(typeof value !== "undefined") {
            document.documentElement[attr] = value;
            document.body[attr] = value;
        }
        return document.documentElement[attr] || document.body[attr];
    }

    function getCss(curEle, attr) {
        var val = null,
            reg = null;
        if(!flag) {
            if(attr === "opacity") {
                val = curEle.currentStyle["filter"];
                reg = /^alpha\(opacity=(\d+(?:\.\d+)?)\)$/i
                val = reg.test(val) ? reg.exec(val)[1] / 100 : 1;
            } else {
                val = curEle.currentStyle[attr];
            }
        } else {
            val = window.getComputedStyle(curEle, null)[attr];
        }

        reg = /^(-?\d+(\.\d+)?)(px|pt|rem|rm)?$/i;
        if(reg.test(val)) {
            return parseFloat(val);
        } else {
            return val;
        }
    }

    function listToArray(likeAry) {
        var ary = [];
        if(!flag) {
            for(var i = 0; i < likeAry.length; i++) {
                ary[ary.length] = likeAry[i];
            }
        } else {
            ary = Array.prototype.slice.call(likeAry);
        }
        return ary;
    }

    function trim(str) {
        return str.replace(/(^ +| +$)/g, "");
    }

    function jsonParse(str) {
        var obj = null;
        if(!flag) {
            obj = eval("(" + str + ")");
        } else {
            obj = JSON.parse(str);
        }
        return obj;
    }

    function offset(curEle) {
        var top = null,
            left = null,
            par = curEle.offsetParent;

        left += curEle.offsetLeft;
        top += curEle.offsetTop;

        while(par) {
            //IE8已经包含边框
            if(navigator.userAgent.indexOf("MSIE 8") === -1) {
                //累加父级边框
                left += par.clientLeft;
                top += par.clientTop;
            }

            //累加父级参照物偏移量
            left += par.offsetLeft;
            top += par.offsetTop;

            par = par.offsetParent;
        }

        return {
            top: top,
            left: left
        }
    }

    function children(curEle, tagName) {
        var nodeList = curEle.childNodes;
        var ary = [];

        if(!flag) {
            for(var i = 0, len = nodeList.length; i < len; i++) {
                var curNode = nodeList[i];
                if(curNode.nodeType === 1) {
                    ary[ary.length] = curNode;
                }
                nodeList = null;
            }
        } else {
            //类数组转换为数组
            ary = Array.prototype.slice.call(curEle.children);
        }
        //二次筛选
        if(typeof tagName === "string") {
            for(var j = 0; j < ary.length; j++) {
                var curEleNode = ary[j];
                if(curEleNode.nodeName.toLowerCase() !== tagName.toLowerCase()) {
                    ary.splice(j, 1);
                    j--;
                }
            }
        }
        return ary;
    }

    function prev(curEle) {
        if(flag) {
            return curEle.previousElementSibling;
        }
        var pre = curEle.previousSibling;
        while(pre && pre.nodeType !== 1) {
            pre = pre.previousSibling;
        }
        return pre;
    }

    function prevAll(curEle) {
        var ary = [];
        var pre = this.prev(curEle);
        while(pre) {
            ary.unshift(pre);
            pre = this.prev(pre);
        }
        return ary;
    }

    function next(curEle) {
        if(flag) {
            return curEle.nextElementSibling;
        }
        var next = curEle.nextSibling;
        while(next && next.nodeType !== 1) {
            next = next.previousSibling;
        }
        return next;
    }

    function nextAll(curEle) {
        var ary = [];
        var next = this.next(curEle);
        while(next) {
            ary.push(next);
            next = this.next(next);
        }
        return ary;
    }

    function sibling(curEle) {
        var ary = [];
        var pre = this.prev(curEle);
        var next = this.next(curEle);
        pre ? ary.push(pre) : null;
        next ? ary.push(next) : null;
        return ary;
    }

    function siblings(curEle) {
        return this.prevAll(curEle).concat(this.nextAll(curEle));
    }

    function index(curEle) {
        return this.prevAll(curEle).length;
    }

    function firstChild(curEle) {
        var children = this.children(curEle);
        return children.length > 0 ? children[0] : null;
    }

    function lastChild(curEle) {
        var children = this.children(curEle);
        return children.length > 0 ? children[children.length - 1] : null;
    }

    function append(newEle, container) {
        container.appendChild(newEle);
    }

    function prepend(newEle, container) {
        var firstEle = this.firstChild(container);
        if(firstEle) {
            container.insertBefore(newEle, firstEle);
            return;
        }
        this.append(newEle, container);
    }

    function insertBefore(newEle, oldEle) {
        oldEle.parentNode.insertBefore(newEle, oldEle);
    }

    function insertAfter(newEle, oldEle) {
        var next = this.next(oldEle);
        if(next) {
            oldEle.parentNode.insertBefore(newEle, next);
            return;
        }
        oldEle.parentNode.appendChild(newEle);

    }

    function hasClass(curEle, className) {
        var reg = new RegExp("(^| +)" + className + "( +|$))");
        return reg.test(curEle.className)
    }

    function addClass(curEle, className) {
        //防止传递的多个类名,先拆分成数组
        var ary = this.trim(className).split(/ +/g);
        for(var i = 0; i < ary.length; i++) {
            var curClass = ary[i];
            if(!this.hasClass(curEle, curClass)) {
                curEle.className += " " + curClass;
            }
        }
    }

    function removeClass(curEle, className) {
        //防止传递的多个类名,先拆分成数组
        var ary = this.trim(className).split(/ +/g);
        var reg = new RegExp("(^| +)" + className + "( +|$))", "g");
        for(var i = 0; i < ary.length; i++) {
            var curClass = ary[i];
            if(this.hasClass(curEle, curClass)) {
                curEle.className = curEle.className.replace(reg, " ");
            }
        }
    }

    function getEleByClass(className, context) {
        context = context || document;
        if(flag) {
            return this.listToArray(context.getElementsByClassName(className));
        }

        var ary = [];
        var classNameAry = this.trim(className).split(/ +/g);
        var nodeList = context.getElementsByTagName("*");
        for(var i = 0, len = nodeList.length; i < len; i++) {
            var curNode = nodeList[i];

            var isOk = true;

            for(var j = 0; j < classNameAry.length; j++) {
                var curName = classNameAry[j];
                var reg = new RegExp("(^| +)" + curName + "( +|$)")
                if(!reg.test(curNode.className)) {
                    isOk = false;
                    break;
                }
            }
            if(isOk) {
                ary.push(curNode);
            }
        }
        return ary;
    }

    function setCss(curEle, attr, value) {
        reg = /^(width|height|top|right|bottom|left|(margin|padding)(Top|Right|Bottom|Right|)?)$/;

        if(attr === "float") {
            curEle.style["cssFloat"] = value;
            curEle.style["styleFloat"] = value;
            return;
        }

        if(attr === "opacity") {
            curEle.style["opacity"] = value;
            curEle.style["filter"] = "alpha(opacity=" + value * 100 + ")";
            return;
        }

        if(reg.test(attr)) {
            if(!isNaN(value)) {
                curEle.style[attr] = value + "px";
            }
        }
        curEle.style[attr] = value;

    }

    function setGroupCss(curEle, obj) {
        obj = obj || 0;
        if(obj.toString() !== "[object Object]") {
            return;
        }
        for(var key in obj) {
            if(obj.hasOwnProperty(key)) {
                this.setCss(curEle, key, obj[key]);
            }
        }
    }

    function css(curEle) {
        var arg2 = arguments[1];
        if(typeof arg2 === "string") {
            var arg3 = arguments[2];
            if(typeof arg3 === "undefined") {
                return this.getCss.call(curEle, arguments);
            }
            this.setCss.call(curEle, arguments);
        }
        arg2 = arg2 || 0;
        if(arg2.toString() === "[object Object]") {
            this.setGroupCss.apply(this, arguments);
        }
    }

    return {
        win: win, //操作浏览器盒子模型
        listToArray: listToArray, //类数组转换为数组
        trim: trim, //去除字符串首尾空格
        jsonParse: jsonParse, //格式化JSON
        offset: offset, //获取元素偏移量
        children: children, //获取元素所有子节点
        prev: prev, //获取哥哥节点
        prevAll: prevAll, //获取所有哥哥节点
        next: next, //获取弟弟节点
        nextAll: nextAll, //获取所有弟弟节点
        sibling: sibling, //获取相邻两个节点
        siblings: siblings, //获取所有兄弟节点
        index: index, //获取当前元素索引
        firstChild: firstChild, //获取当前元素第一个子节点
        lastChild: lastChild, //获取当前元素最后一个子节点
        append: append, //向当前元素末尾追加一个元素
        prepend: prepend, //向当前元素之前追加一个元素
        insertBefore: insertBefore, //把当前元素追加指定元素之前
        insertAfter: insertAfter, //把当前元素追加指定元素之后
        hasClass: hasClass, //判断元素是否有某个类名
        addClass: addClass, //给元素增加样式
        removeClass: removeClass, //删除元素样式
        getEleByClass: getEleByClass, //通过类名获取元素
        getCss: getCss, //获取元素样式
        setCss: setCss, //设置元素样式
        css: css //获取设置css
    }
})(window)
var ul=$('#lists');
        var lis=$$(ul,'li')
        
        //#lists $('#lists')
        function $(selector){
            return document.getElementById(selector.substr(1));
        }
         
        function $$(elem,selector){
            //一个参数情况下 //$$('.list')或 $$('li')  
            if(arguments.length==1){
                selector=elem;
                elem=document;
            }
            //两个参数情况下
            if(selector.charAt(0)=='.'){//$$(content,'.list')
                return elem.getElementsByClassName(selector.substr(1))
            }else{//$$(content,'li')
                return elem.getElementsByTagName(selector)
            }
        }

相关文章

  • 原生jsDom操作部分封装

  • 原生jsdom操作记录

    查找上一个兄弟节点 查找最后一个子节点 or 查找父节点 判断子节点是否有子节点 div#city>ul>li ...

  • jsDOM操作

    DOM可以将任何HTML或XML文档描绘成一个由多层节点构成的结构。节点分为几种不同的类型,每种类型分别表示文档中...

  • JSDom操作

    转自 知行网 lement Traversal规范中的firstElementChild、lastElementC...

  • Android原生组件集成RN

    原生模块: java: 1.ToastModule 实现原生封装核心操作 public cl...

  • NodeJS 用jsdom抓取html数据

    先要装jsdom: npm install jsdom. var jsdom = require('jsdom')...

  • 原生js ajax网络数据请求 XMLHttprequest、A

    再学封装ajax请求 原生JS,AJAX数据封装 兼容性处理 脚本: 请求操作:

  • jsDOM节点操作

    DOM节点操作(都是函数) 创建节点 控制台输出 ↓ 这个h1只是创建了但是没有被使用 文档结构里面也没有h1这个...

  • jsDOM操作基础

    1:js的组成 ①js的组成语法②DOM(文档对象模型)③BOM浏览器对象模型 2:简介 网页被加载时,浏览器会创...

  • jQuery

    jQuery简介 jQuery其实就是原生JS封装之后的一种方法。比起原生JS的操作要方便许多,原生JS的DOM操...

网友评论

      本文标题:原生jsDom操作部分封装

      本文链接:https://www.haomeiwen.com/subject/vpskgqtx.html