写一个简单的选择器( 方便小项目使用 )

  const prefix = getVendorPrefix()

    function getVendorPrefix() {
        var body = document.body || document.documentElement

        var style = body.style

        var vendor = ['webkit', 'khtml', 'moz', 'ms', 'o']

        var i = 0
        while (i < vendor.length) {
            if (typeof style[vendor[i] + 'Transition'] === 'string') {
                return vendor[i]
            }
            i++
        }
    }

    class Node {
        constructor(selector) {
            if (typeof selector === 'string') {
                this.init(document.querySelectorAll(selector))
            } else {
                if (Object.prototype.toString.apply(selector) === '[object NodeList]') this.init(selector)
                else this.init([selector])
            }
        }

        init(source) {
            const names = Object.getOwnPropertyNames(Array.from(source))
            names.forEach(item => {
                this[item] = source[item]
            })
        }

        find(selector) {
            const target = this[0]
            return new Node(target.querySelectorAll(selector))
        }

        parent(selector) {
            let target = this[0]
            if (!selector && target.parentNode) return new Node(target.parentNode)
            while (target.parentNode) {
                if (target.parentNode.classList.contains(selector)) return new Node(target.parentNode)
                target = target.parentNode
            }
            return null
        }

        each(callback) {
            for (let i = 0; i < this.length; i++) {
                callback && callback(new Node(this[i]), i)
            }
            return this
        }

        style(name, style) {
            for (let i = 0; i < this.length; i++) {
                let item = this[i], attr = name
                item.style[attr] = style
                attr = `${prefix}${attr[0].toUpperCase()}${attr.slice(1)}`
                if (item.style[attr]) item.style[attr] = style
            }
            return this
        }

        css(list = {}) {
            for (let attr in list) {
                this.style(attr, list[attr])
            }
            return this
        }

        transform(x, y, time) {
            if (x === undefined && y == undefined) {
                const target = this[0]
                const attr = prefix ? `${prefix}Transform` : `transform`
                const transform = target.style[attr]
                const reg = /translate([X|Y])?\((.+)?\)/
                const rst = reg.exec(transform)
                let x = 0;
                let y = 0
                if (rst) {
                    if (rst[1] === 'X') x = parseFloat(rst[2])
                    if (rst[1] === 'Y') y = parseFloat(rst[2])
                    if (!rst[1]) {
                        const xy = rst[2].split(',')
                        x = parseFloat(xy[0])
                        y = parseFloat(xy[1])
                    }
                }
                return {x, y}
            }
            if (time !== null) {
                this.style('transition', `all ${time / 1000}s`)
                setTimeout(() => {
                    this.style('transition', `all 0s`)
                }, time)
                setTimeout(() => {
                    this.style('transform', `translate(${x}px,${y}px)`)
                }, 0)
            } else {
                this.style('transform', `translate(${x}px,${y}px)`)
            }
            return this
        }


    }

    function $(selector) {
        return new Node(selector)
    }

  

   const tops = $('.box')
        .css({
            height: '1000px',
            width: '1000px',
        })
        .find('.top').style('height', '150px')
        .css({
            height: '1000px',
            width: '1000px',
        }).parent('box')
    console.log(tops)

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用uni-app的原生组件picker来实现地址选择器。以下是一个简单的示例: ```html <template> <view class="container"> <view class="picker-wrap"> <picker :value="value" mode="region" @change="onChange"> <view class="picker-item">{{region}}</view> </picker> </view> </view> </template> <script> export default { data() { return { value: [0, 0, 0], region: '' } }, methods: { onChange(e) { const value = e.detail.value const region = this.$refs.picker.getValues() this.value = value this.region = region.join(' ') } } } </script> ``` 在上面的示例中,我们使用了picker组件,并将mode属性设置为region,这样picker就变成了一个可选择省、市、区/县的地址选择器。onChange方法在picker值改变时触发,通过getValues()方法获取当前picker的值,并将其赋给region。最后,我们将region显示在页面上。 ### 回答2: UniApp是一个跨平台的开发框架,可以同时在多个平台上开发应用程序。云项目是指使用云开发服务,可以实现数据的存储、处理和部署等功能。但是即使不使用项目,也可以使用UniApp来实现地址选择器的功能。 要实现地址选择器,可以使用uni-app官方提供的uni-picker组件,该组件可以用于选择器的展示和数据的获取。在非云项目中,可以通过以下步骤来实现地址选择器: 1. 创建一个页面,该页面用于展示地址选择器。在该页面上,可以使用uni-picker组件来展示省、市和区的选择器。通过绑定相关的数据源和事件,使得选择器能够实现级联选择的功能。 2. 准备数据源,包括省、市和区的数据。可以通过本地的JSON数据或者从服务器端获取相应的数据。可以使用uni-request等插件来进行数据的请求和处理。 3. 绑定事件,通过选择器的change事件来获取用户选择的地址信息。可以在选择器的change事件中,获取选择器的值,并将选择的地址信息保存到页面的data中。 4. 在页面的其他地方使用选择的地址信息。可以将选择的地址信息传递给其他页面或者组件,并在其他页面或者组件中进行相应的处理。可以将选择的地址信息保存到本地存储中,以便下次使用。 通过以上步骤,就可以在uni-app项目中实现地址选择器的功能,而不依赖云项目使用uni-picker组件和合适的数据处理,可以完成地址选择的交互和数据获取的功能。 ### 回答3: UniApp是一种基于Vue.js开发的跨平台应用框架,可以同时开发适用于多个移动端平台的应用。虽然UniApp自带了一些云开发的功能,但是如果不想使用项目实现地址选择器,我们可以通过其他方式来实现。 一种常见的做法是通过选择器组件来实现地址选择器功能。我们可以自己开发一个地址选择器组件,或者使用别人已经开发好的组件库,如Vant、Element等。选择器组件可以用来选择省份、城市、区县等地址信息。 另外,我们还可以借助第三方地图API来实现地址选择器功能。通过调用地图API提供的接口,可以获取到详细的地址信息,并在应用中展示供用户选择。在选择地址后,可以将选择的地址信息保存到应用中,并在需要的地方进行使用。 除了选择器组件和地图API,我们还可以使用一些开源的地址选择器插件来实现。这些插件通常提供了丰富的地址数据和快速的地址检索功能,可以方便地集成到UniApp应用中,并且效果和体验都比较好。 总之,虽然UniApp本身带有云开发功能,但是如果不想使用项目实现地址选择器,我们可以通过选择器组件、第三方地图API或者开源插件来实现,从而满足应用的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值