原生js实现图片瀑布流布局,注释超详细

先看第一种方法

代码:





Title











复制上面代码到浏览器解析运行,即可浏览效果

第二种方法代码量会比上面多一些

代码:



    
        
        
        瀑布流
        
    
    
        

    复制以上代码,并把下面这一段js代码复制到js文件中放到和上面代码同级的地方并引入,即可运行浏览效果

    代码如下:

    function ajax(obj, fn) {
        let ajx = new XMLHttpRequest() //创建ajax实例
        obj.type = obj.type ? obj.type : 'get' //判断type存不存在,不存在默认等于get
        let data = '' //向后端发送的数据
        if (obj.data) { //判断是否存在
            for (let i in obj.data) {
                data += i + '=' + obj.data[i] + '&' //键值拼接成name=zhagnsan&age=18形式
            }
            let k = data.split('')
            k.splice(data.length - 1, 1)
            data = k.join('')
        }
        if (obj.type == 'get') { //处理get请求发送数据
            ajx.open(obj.type, obj.url + '?' + data) //地址上拼接数据
            ajx.send()
        } else if (obj.type == 'post') { //处理post请求发送数据
            ajx.open(obj.type, obj.url)
            ajx.setRequestHeader('content-type', 'application/x-www-form-urlencoded') //设置请求头
            ajx.send(data) //发送数据
        }
        ajx.onreadystatechange = () => {
            if (ajx.readyState == 4) {
                if (ajx.status == 200) {
                    /*
                    将得到的数据传给回调函数
                    短路写法,如果不传fn为空不会执行,有值就执行
                    */
                    fn && fn(ajx.responseText)
                }
            }
        }
    }
    
    // ajax({ //调用封装的方法
    //     type: 'get', //可以不写,默认get
    //     url: 'http://localhost/day02/api/gouwu.php', //请求地址
    //     data: { //需要传输的数据,可选
    //         name: 'zhangsan',
    //         age: 18
    //     }
    // },a=>{//处理的到的数据
    //     console.log(a)
    // })
    
    function jsonp(obj) {
        let sc = document.createElement('script')
        let data = ''
        if (obj.data) {
            for (let i in obj.data) {
                data += `${i}=${obj.data[i]}&`
            }
            data = data.slice(0, -1)
            sc.setAttribute('src', obj.url + `?cd=${obj.cd}&${data}`)
        } else {
            sc.setAttribute('src', obj.url + `?cd=${obj.cd}`)
        }
    
        document.body.appendChild(sc)
    }
    
    // jsonp({
    //     url:'http://localhost/day02/api/gouwu.php',
    //     cd:'fn'
    // },a=>{
    //     console.log(a)
    // })
    
    function get(obj) {
        return new Promise((resolve, reject) => {
            let a = new XMLHttpRequest()
            let data = ''
            if (obj.data) {
                for (let i in obj.data) {
                    data += i + '=' + obj.data[i] + '&'
                }
                data = data.slice(0, -1)
                a.open('get', obj.url + '?' + data)
            }else{
                a.open('get', obj.url)
            }
            a.send()
            a.onreadystatechange = () => {
                if (a.readyState === 4) {
                    if (a.status === 200) {
                        resolve(a.responseText)
                    } else {
                        reject()
                    }
                }
            }
        })
    
    }
    // get({//调用格式
    //     url:'http://localhost/day02/api/gouwu.php',//获取的地址
    //     data:{ //可不写
    //         a:1,
    //         b:2
    //     }
    // }).then(a=>{//获取数据成功
    //     console.log(a)
    // }).catch(err=>{ //获取数据失败
    //     console.log(err)
    // })

     

    你可能感兴趣的:(原生js实现图片瀑布流布局,注释超详细)