vue如何实现水平方向拖拽容器改变宽度

1.定义一个指令方法:

Vue.directive('horizontalDrag', {
    bind: function (el, binding) {
        const dragbar = el.querySelector('.dragbar');

        dragbar.onmousedown = e => {
            const disX = el.offsetLeft;
            console.log('disX:', disX);

            document.onmousemove = function (e) {
                e.preventDefault();

                const l = e.clientX - 100;

                if (l > 200) {
                    el.style.width = `${l}px`;
                }
            };

            document.onmouseup = function (e) {
                document.onmousemove = null;
                document.onmouseup = null;
            };
        };
    },
    update(el, binding) {
        if (!binding.value.contentShow) {
            el.style.marginLeft = -el.offsetWidth + 'px';
        } else {
            el.style.marginLeft = '0px';
        }
    },
})

2.在vue文件中使用:

<template>
	<div class="common-template-content">
		<div
	        class="common-template-content-left"
	        v-horizontalDrag
	    >
	        <div>
	 			//容器内容
	        </div>
	        <label class="dragbar"></label>
	    </div>
	    <div class="common-template-content-right"></div>
	</div>
    
</template>

<style scoped lang="less">
    .common-template-content {
        display: flex;
    }
	/deep/.common-template-content-right {
	    margin-left: calc(20rem / 100);
	    position: relative;
	    overflow: hidden;
	}
	.common-template-content-left {
	    background: #fff;
	    width: calc(240rem / 100);
	    padding: calc(12rem / 100) calc(10rem / 100);
	    box-shadow: 0 calc(5rem / 100) calc(12rem / 100) #e8e8e8;
	    border-right: calc(1rem / 100) transparent solid;
	    border-top: calc(1rem / 100) transparent solid;
	    display: flex;
	    flex-direction: column;
	    height: 100%;
	    transition: margin 0.7s;
	    position: relative;
	    .dragbar {
	        width: 20px;
	        height: 100%;
	        position: absolute;
	        right: -10px;
	        cursor: ew-resize;
	    }
	}
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值