【项目经验】elementui抽屉(从下到上方向)实现向上拉伸

效果图

直接上代码

javascript 复制代码
<template>
    <div>
        <el-button @click="drawerBtn" type="primary" style="margin-left: 16px;">
            点我打开
        </el-button>

        <el-drawer title="我是标题" :modal="false" :wrapperClosable="false" :visible.sync="drawer" :with-header="false"
            :direction="btt" v-drawerDrag>
            <div class="box">
                <div class="text">bug天选之子</div>
            </div>
        </el-drawer>
    </div>
</template>

<script>
import Vue from 'vue'
Vue.directive('drawerDrag', {
    bind (el, binding, vnode, oldVnode) {
        // 抽屉可拉伸的最小高度
        let minHeight = 200;
        const dragDom = el.querySelector('.el-drawer');
        // console.log("抽屉的Dom", dragDom);
        // 创建上拉按钮并添加到抽屉里面
        const resizeELT = document.createElement("div");
        dragDom.appendChild(resizeELT);
        // 上拉按钮的样式
        resizeELT.style.cursor = 'n-resize';
        resizeELT.style.position = 'absolute';
        resizeELT.style.height = '10px';
        resizeELT.style.width = '100%';
        resizeELT.style.left = '0px';
        resizeELT.style.top = '0px';
        // resizeELT.style.background = 'red'
        // console.log(resizeELT);

        // 上边拉伸鼠标按下事件
        resizeELT.onmousedown = (e) => {
            console.log("jinlail");
            let ELoffSetTop = dragDom.offsetTop;
            let clientY = e.clientY;
            let elH = dragDom.clientHeight;
            document.onmousemove = function (e) {
                // 鼠标移动时禁止默认事件
                e.preventDefault();
                if (clientY > ELoffSetTop && clientY < ELoffSetTop + 10) {
                    // 向上拉
                    if (clientY > e.clientY) {
                        dragDom.style.height = elH + (clientY - e.clientY) + 'px';
                        console.log(dragDom.style.height);
                    }
                    // 向下拉
                    if (clientY < e.clientY) {
                        if (dragDom.clientHeight < minHeight) {
                            // 小于最小高度,不操作
                        } else {
                            dragDom.style.height = elH - (e.clientY - clientY) + 'px';
                            console.log(dragDom.style.height);
                        }
                    }
                }
            }
            // 结束时移除事件
            document.onmouseup = function (e) {
                document.onmousemove = null;
                document.onmouseup = null;
            }
        }
    }
})
export default {
    name: 'WorkspaceJsonAboutView',

    data () {
        return {
            drawer: false,
            btt: 'btt',
            closeFalg: false
        };
    },

    mounted () {

    },

    methods: {
        drawerBtn () {
            this.drawer = true;
        }
    },
};
</script>

<style lang="less" scoped>
// 复制的时候可以不用复制css代码
.box {
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    background: url("../assets/img/火焰.jpg");
    background-size: 100% 100%;
    background-repeat: no-repeat;
}

.text {
    flex: 0 0 100%;
    font-size: 50px;
    font-weight: 900;
    color: #00000000;
    text-align: center;
    font-family: 'Lato', sans-serif;
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    border-bottom: 1px solid #d4d7ff;
    border-top: 1px solid #d4d7ff;
    /*这里更换你的背景图片*/
    background: url("../assets/img/火焰.jpg");
    background-clip: text;
    -webkit-background-clip: text;
}
</style>
相关推荐
集成显卡4 小时前
Bun v1.3.6 发布:内置 Tarball 归档支持、JSONC 解析、Bundle 分析增强等重磅更新!
javascript·新版本·bun.js
奔跑的web.4 小时前
TypeScript Enum 类型入门:从基础到实战
前端·javascript·typescript
盐真卿4 小时前
python2
java·前端·javascript
梦梦代码精4 小时前
BuildingAI vs Dify vs 扣子:三大开源智能体平台架构风格对比
开发语言·前端·数据库·后端·架构·开源·推荐算法
刘一说5 小时前
Vue3 组合式 API(Composition API):逻辑复用的革命性实践
vue.js·vue
seabirdssss5 小时前
《bootstrap is not defined 导致“获取配置详情失败”?一次前端踩坑实录》
前端·bootstrap·html
kgduu5 小时前
js之表单
开发语言·前端·javascript
摘星编程6 小时前
React Native for OpenHarmony 实战:Picker 选择器组件详解
javascript·react native·react.js
摘星编程7 小时前
React Native for OpenHarmony 实战:VirtualizedList 虚拟化列表
javascript·react native·react.js
谢尔登7 小时前
Vue3 响应式系统——computed 和 watch
前端·架构