最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 实战小技巧: 基于Vue的混入-实现面板打开与关闭

    正文概述 掘金(技术大黍)   2021-03-31   583

    实战小技巧: 基于Vue的混入-实现面板打开与关闭

    前言

    Vue.js在国内流行得不要不要的,我们今天也来凑凑热闹,给大家介绍一个实战小技巧。我们现给出实战核心代码,希望能够帮助到大家。

    实战代码

    自定义面板组件

    /**
     * 功能:定义一个基本面板组件(具有关闭按钮)
     */
    
    let BasePanel1 = {
        props: ['visible'],
        data() {
            return {
                isFirstShow: true, //是否为首次渲染
                isClose: false,     //背景选择面板是否关闭(用于播放关闭动画)
            }
        },
        watch: {
            //监听visible变化(将首次渲染设定为false)
            visible: function (newVal,oldVal) {
                //首次打开
                if(this.isFirstShow) {
                    this.firstShow();
                    this.isFirstShow = false;
                }
                //面板显示与隐藏
                if(newVal) {
                    this.panelShow();
                }else {
                    this.panelClose();
                }
            }
        },
        methods: {
            //面板首次打开时要做的逻辑
            firstShow: function () {
    
            },
            //面板打开时要做的逻辑
            panelShow: function () {
    
            },
            //面板关闭时要做的逻辑
            panelClose: function () {
    
            },
            //关闭按钮点击事件
            onCloseBtnClick: function() {
                //设置动画状态为正在播放(关闭动画)
                this.isClose = true;
                //动画播放完毕后,重置数据
                setTimeout(() => {
                    this.isClose = false;
                    this.$emit('update:visible',false);
                },400);
            },
        }
    }
    

    自定义一个包裹组件

    /**
     * 功能:包裹页面组件
     */
    
    let PackagePanel = {
        template: `
            <div class="shade package-panel" v-if="!isFirstShow" v-show="visible">
                <div :class="['panel-content animate__animated animate__faster',this.isClose ? 'animate__zoomOut' : 'animate__zoomIn']">
                    <!-- 关闭按钮 -->
                    <img
                        class="btn close-btn"
                        src="./imgs/ui/BtnClose2.png"
                        
                        @click="onCloseBtnClick"
                    />
                    <!-- 绘制包裹格子 -->
                    <div class="box-panel package-box-panel">
                        <div
                            class="package-box"
                            v-for="i in 15"
                            :style="{left: 136 * ((i - 1) % 5) + 'px',top: 30 + 129 * Math.floor((i - 1) / 5) + 'px'}"
                        ></div>
                    </div>
                </div>
            </div>
        `,
        mixins: [BasePanel1],
        methods: {
            //面板首次打开时要做的逻辑
            firstShow: function () {
                //给关闭按钮绑定音效
                this.$nextTick(() => {
                    addEventBtnEffect(document.querySelector('.package-panel .close-btn'));
                });
            }
        }
    }
    

    主页导入组件

    ...
    <script type="text/javascript" src="./components/BasePanel1.js"></script>
    <script type="text/javascript" src="./components/PackagePanel.js"></script>
    ...
    

    通用样式设置

    ...
    .shade {
      width: 100%;
      height: 100%;
      background-color: rgba(0,0,0,.5);
      position: absolute;
      top: 0;
    }
    ...
    

    包裹样式设置

    //包裹界面
    .package-panel {
      pointer-events:auto;
      @include flex-center;
      .panel-content {
        background-image: url("../imgs/ui/package-panel.png");
        width: 899px;
        height: 564px;
        position: relative;
        .close-btn {
          position: absolute;
          right: 10px;
          top: 20px;
          z-index: 2;
        }
        .box-panel {
          position: absolute;
          width: 656px;
          height: 445px;
          left: 120px;
          top: 82px;
          overflow: hidden;
          box-sizing: border-box;
          &.package-box-panel {
            z-index: 1;
            .package-box {
              position: absolute;
              background-image: url("../imgs/ui/package-box.png");
              width: 106px;
              height: 109px;
            }
          }
        }
      }
    }
    

    主页引入样式

    ...
    @import "../components/PackagePanel";
    

    总结

    详细代码和设计思路,如果大家感兴趣,请关注B站老九学堂的直播间。

    最后

    记得给大黍❤️关注+点赞+收藏+评论+转发❤️

    作者:老九学堂—技术大黍

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


    起源地下载网 » 实战小技巧: 基于Vue的混入-实现面板打开与关闭

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元