vue中手写动态渲染左右滚动菜单栏 点击居左 以及设置scrollLeft属性设置无效的原因解决

vue中可能会碰到无法使用框架的问题,此时需要手写左右滚动的滑动菜单栏,并且头部或者底部还有对应的标题点击定位。此时应该怎么做呢?

(1)下面看结构:

  <div class="courseCate-box" >

                    <div class="courseCate  flex"

                        :id="'cate' + pIndex" >

                        <li class="courseCate-li"

                        v-for="(cItem,cIndex) in childs"

                        }"

                        :key="cItem.id"

                        :id="'coursecate' + cIndex "

                        @touchstart="onCategoryChange(pIndex, cIndex ,pItem ,cItem)"

                        >{{cItem.plate_title}}

                        

                    </li>

盛放菜单栏的盒子 courseCate-box   宽度设置100%

    width: 100%;

    height: 1.68rem;

    padding-left: .2rem;

    padding-right: .2rem;

    box-sizing: border-box;

下面设置父元素courseCate 盒子属性,   父元素的宽度不用设置   但是一定要设置overflow-x: scroll;  不能将overflow-x: scroll;设置在courseCate-box上   否则后面设置子元素li  点击靠左滑动

时无法生效。

    height: 1.12rem;

    overflow-x: scroll;

    height: 100%;

此时效果

子元素li的内容  可以动态生成  此时就出现了横向滚动的菜单栏效果。

(2) 如何设置每次点击  点击的子元素盒子都靠左?

这里有多种方法  虽然vue推荐通过ref去操作dom 但是这里楼主不建议,因为容易出现不可逆的操作。

方法如下:

假如你的菜单栏 和 子元素都是动态渲染生成的  ,不明白个数和内容 ,这里建议动态给设置id

比如:

 v-for="(cItem,cIndex) in childs"

                        }"

                        :key="cItem.id"

                        :id="'coursecate' + cIndex "

然后根据动态id获取每个子元素的宽度

var element = document.getElementById('cate' + pIndex)

            var item = cIndex == 0 ? 0 :document.getElementById('coursecate' + pIndex + cIndex ).clientWidth

然后获取到之后,需要设置滑动属性  这里使用scrollLeft()这个属性,具体可以参考官方文档,

注意!!!  父元素一定要设置 overflow-x: scroll; 否则不生效

然后设置

            element.scrollLeft = item*cIndex;

   有人会奇怪 为什么要用 element.scrollLeft = item*cIndex;    很多人都是element.scrollLeft += item;

注意如果是+= 的话   当你有底部或者头部另外的二级标题的时候

当滑动单最后一个  在反过来点击第一个的时候,此时element会出现不生效的情况

所以这边建议要不单独写当index从0到最后的scrollLeft  要不和楼主一样 用 item*cIndex

这样即使反过头为1  也会重新计算
 

今天的vue中滑动菜单的讲解就到这  有问题欢迎留言

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要给Vue Node动态设置属性,需要使用JavaScript的属性设置方法。在Vue,可以通过v-bind指令来动态地将属性绑定到节点上。 在Vue,可以通过一个对象来设置节点的属性。例如,可以使用对象来设置节点的id、class、style等属性。 首先,在Vue创建一个data对象,用于存储需要动态设置属性。然后,在节点标签上使用v-bind指令,将相关属性与data对象属性绑定起来。最后,在Vue组件修改data对象的属性值,即可动态地修改节点的属性。 例如,可以使用以下代码来动态设置节点的class属性: ``` <template> <div v-bind:class="classObject"></div> </template> <script> export default { data() { return { classObject: { 'btn': true, 'btn-primary': false } } }, methods: { toggleClass() { this.classObject['btn-primary'] = !this.classObject['btn-primary'] } } } </script> ``` 在上面的代码,创建了一个名为classObject的data对象,用于存储节点的class属性。在节点标签上使用v-bind:class指令,将classObject对象与节点的class属性绑定起来。然后在组件的方法,通过修改classObject对象属性值,实现动态地修改节点的class属性。 同样的,通过以上的例子,可以使用v-bind指令来动态设置节点的id、style等其他属性。 综上所述,动态设置Vue Node的属性并不难,只需要熟悉Vuev-bind指令的使用方法,以及JavaScript属性设置方法即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值