VUE自定义指令的配置和传参

VUE自定义指令的配置和传参

新增传参封装

binding.value:值为html页面v-pin设置的值

binding.modifiers:值为v-pin.bottom.right的 bottom right值 是写在v-pin用 . 连接的值

binding.arg:值为v-pin:true.bottom.right的 true值 是写在v-pin用 : 连接的值

HTML

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义指令的配置和传参</title>
    <style>
        .card {
            width: 200px;
            background-color: #ccc;
            padding: 10px;
            margin: 5px;
        }
    </style>
</head>

<body>
    <div id="seg1">
        <div v-pin:true.bottom.right="card1.pinned" class="card">
            <button @click="card1.pinned=!card1.pinned">定住/取消</button>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat accusamus hic consequuntur quos ab placeat
            quibusdam libero voluptates facilis aliquam id, tempora quas explicabo, commodi atque ex dolorem iure
            quidem.
        </div>
        <div v-pin:card2.color.bottom.left="card2.pinned" class="card">
            <!-- <button @click="card1.pinned=!card1.pinned">定住/取消</button> -->
            <!-- ,card2.color=!card2.color -->
            <a @click="card2.pinned=!card2.pinned" href="#">定住/取消</a>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Repellat accusamus hic consequuntur quos ab placeat
            quibusdam libero voluptates facilis aliquam id, tempora quas explicabo, commodi atque ex dolorem iure
            quidem.
        </div>
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veritatis suscipit molestias beatae enim sapiente quod
        officiis pariatur. Velit tenetur vitae molestiae deleniti illo? Commodi omnis nobis obcaecati totam iste ab.
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Corporis, et rem quasi adipisci beatae cupiditate
        sapiente. Doloribus velit sequi omnis reiciendis repudiandae quod porro rem a dolores itaque. Blanditiis, a?
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veritatis suscipit molestias beatae enim sapiente quod
        officiis pariatur. Velit tenetur vitae molestiae deleniti illo? Commodi omnis nobis obcaecati totam iste ab.
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Corporis, et rem quasi adipisci beatae cupiditate
        sapiente. Doloribus velit sequi omnis reiciendis repudiandae quod porro rem a dolores itaque. Blanditiis, a?
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veritatis suscipit molestias beatae enim sapiente quod
        officiis pariatur. Velit tenetur vitae molestiae deleniti illo? Commodi omnis nobis obcaecati totam iste ab.
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Corporis, et rem quasi adipisci beatae cupiditate
        sapiente. Doloribus velit sequi omnis reiciendis repudiandae quod porro rem a dolores itaque. Blanditiis, a?
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veritatis suscipit molestias beatae enim sapiente quod
        officiis pariatur. Velit tenetur vitae molestiae deleniti illo? Commodi omnis nobis obcaecati totam iste ab.
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Corporis, et rem quasi adipisci beatae cupiditate
        sapiente. Doloribus velit sequi omnis reiciendis repudiandae quod porro rem a dolores itaque. Blanditiis, a?
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veritatis suscipit molestias beatae enim sapiente quod
        officiis pariatur. Velit tenetur vitae molestiae deleniti illo? Commodi omnis nobis obcaecati totam iste ab.
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Corporis, et rem quasi adipisci beatae cupiditate
        sapiente. Doloribus velit sequi omnis reiciendis repudiandae quod porro rem a dolores itaque. Blanditiis, a?
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veritatis suscipit molestias beatae enim sapiente quod
        officiis pariatur. Velit tenetur vitae molestiae deleniti illo? Commodi omnis nobis obcaecati totam iste ab.
        Lorem ipsum dolor sit amet consectetur adipisicing elit. Corporis, et rem quasi adipisci beatae cupiditate
        sapiente. Doloribus velit sequi omnis reiciendis repudiandae quod porro rem a dolores itaque. Blanditiis, a?
        Lorem ipsum, dolor sit amet consectetur adipisicing elit. Veritatis suscipit molestias beatae enim sapiente quod
        officiis pariatur. Velit tenetur vitae molestiae deleniti illo? Commodi omnis nobis obcaecati totam iste ab.

    </div>
    <script src="https://cdn.bootcss.com/vue/2.6.11/vue.js"></script>
    <script src="index.js"></script>
</body>

</html>

JS

// el为当前元素     binding为值和基本信息就是v-pin设置的值
Vue.directive('pin', function (el, binding) {
    // binding.value的值为html页面v-pin设置的值 然后赋值给pinned
    var pinned = binding.value;
    console.log(pinned);
    // binding.modifiers的值为v-pin.bottom.right的 bottom right值 是写在v-pin用 . 连接的值
    var position = binding.modifiers
    console.log(position);
    // binding.arg的值为v-pin:true.bottom.right的 true值 是写在v-pin用 : 连接的值
    var warning = binding.arg
    console.log(warning);



    // 如果pinned的值为true 则让el当前元素设置如下的样式
    if (pinned) {
        el.style.position = 'fixed'

        for (var key in position) {
            if (position[key]) {
                el.style[key] = '10px'
            }
        }
        if (warning === 'true') {
            el.style.background = 'yellow'
        }
        // else {
        //     el.style.background = '#ccc'
        // }
    } else {
        el.style.position = 'static'
    }

    // 留作业,把点击变黄色的完善一下(可以定义函数在methods里)让warning的值变为false
    // 思路:点击时让color变为true   再次点击时变为false  可参考上面的思路
})
new Vue({
    el: "#seg1",
    data: {
        card1: {
            pinned: false,
            // color: false

        },
        card2: {
            pinned: false,
            // color: false

        }
    }
})
发布了19 篇原创文章 · 获赞 1 · 访问量 166

猜你喜欢

转载自blog.csdn.net/qq_44822110/article/details/104782945
今日推荐