JustNews主题可视化编辑器Filps翻转模块和Tab切换模块

自带的可视化编辑器模块有两个效果没有Filps翻转和Tab切换,也是自己简单写了俩,这两个模块放至主题/modules目录下,建议建子主题,避免更新覆盖。

justnews主题可视化编辑器Filps翻转模块和Tab切换模块

一、TAB切换模块

该模块主要是基于手风琴模块修改,tab页横向自动切换,当鼠标移动到标题是切换停止,效果如下所示。

<?php
defined( 'ABSPATH' ) || exit;
class WPCOM_Module_zke_tabs extends WPCOM_Module {
    function __construct() {
        $options = array(
            array(
                'tab-name' => '常规设置',
                'title' => array(
                    'name' => '模块标题'
                ),
                'sub-title' => array(
                  'name' => '模块副标题'
                ),
                'tabs' => array(
                    'type' => 'repeat',
                    'name' => '选项卡',
                    'items' => array(
                        'title' => array(
                            'name' => '标题'
                        ),
                        'content' => array(
                            'name' => '内容',
                            'type' => 'e',
                        )
                    )
                ),
                'align' => array(
                    'name' => '对齐',
                    'f' => 'block:0',
                    'v-show' => 1,
                    'type' => 'r',
                    'ux' => 1,
                    'mobile' => 1,
                    'value' => 'center',
                    ),
            ),
            array(
                'tab-name' => '风格样式',
                'color' => array(
                    'name' => '模块标题颜色',
                    'type' => 'color',
                    'gradient' => 1
                ),
                'title-color' => array(
                    'name' => '选项卡标题颜色',
                    'type' => 'color',
                    'desc' => '选项卡标题部分的文字颜色',
                    'gradient' => 1
                ),
                'content-color' => array(
                    'name' => '选项卡内容颜色',
                    'type' => 'color',
                    'desc' => '选项卡内容部分的文字颜色',
                    'gradient' => 1
                ),
                'style' => array(
                    'name' => '显示风格',
                    'type' => 'radio',
                    'ux' => 1,
                    'value' => '0',
                    'o' => array(
                        '0' => '默认风格',
                        '1' => '有背景色'
                    )
                ),
                'bg-color' => array(
                'name' => '选项卡背景颜色',
                'type' => 'c',
                'gradient' => 1
                 ),
                
                'margin' => array(
                'name' => '外边距',
                'type' => 'trbl',
                'mobile' => 1,
                'use' => 'tb',
                'desc' => '和上下模块/元素的间距',
                'units' => 'px, %, vw, vh',
                'value'  => apply_filters('module_default_margin_value', '20px')
                ),
                'padding' => array(
                    'name' => '内边距',
                    'type' => 'trbl',
                    'mobile' => 1,
                    'desc' => '模块内容区域与边界的距离',
                    'units' => 'px, %, vw, vh',
                    'value'  => '20px 0'
                ),
                'mobile-hide' => array(
                'name' => '移动端隐藏',
                'type' => 't',
                'desc' => '开启则在移动端不显示'
                ),
                'box-shadow' => array(
                'name' => '阴影',
                'type' => 'bs',
                'value'  => '',
                'mobile' => 1,
                'desc' => '可选,设置容器阴影'
                 )
            )
        );
        if(!function_exists('wpcom_module_title')){
            unset($options[0]['title']);
            unset($options[0]['sub-title']);
            unset($options[1]['color']);
        }
        parent::__construct('tabs', 'ZK选项卡', $options, 'horizontal_split', '/themer/mod-my-module.png');
    }
    function style( $atts ){
            $bg_color = WPCOM::gradient_color($this->value('bg-color'));
            return array(
                'color' => array(
                    ',.sec-title' => '{{color}};',
                    '.sec-title-wrap:after, .sec-title-wrap:before' => '{{background-color}};'
                ),
                'title-color' => array(
                    '.nav-tabs > li > a' => '{{color}};'
                ),
                'content-color' => array(
                    '.tab-content' => '{{color}};',
                ),
                'bg-color' => array(
                    '.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus' => '{{background-color}};'
                ),
                'box-shadow' => array(
                    '.container-inner' =>  'box-shadow: {{value}};'
                ),
                'align' => array(
                    '.nav-tabs' => 'display: flex !important; justify-content: {{value}};',
                )
            );
        }

   function template( $atts, $depth ){
    $style = $this->value('style') ? ' tab-style-2' : '';
    if(function_exists('wpcom_module_title')){
        wpcom_module_title($this->value('title'), $this->value('sub-title'));
    }

    ?>
    <div class="wp-block-wpcom-tabs<?php echo $style;?>" id="tabs-<?php echo $this->value('modules-id');?>" role="tabpanel">
        <div class="tab-slider-wrap">
            <ul class="nav nav-tabs" role="tablist">
                <?php 
                if($this->value('tabs')){
                    foreach($this->value('tabs') as $index => $item) {
                        $active_class = '';
                        if ($index == 0) {
                            $active_class = ' active';
                        }
                ?>
                <li role="presentation" class="<?php echo $active_class; ?>"><a href="#tab-<?php echo $this->value('modules-id');?>-<?php echo $index; ?>" aria-controls="tab-<?php echo $this->value('modules-id');?>-<?php echo $index; ?>" role="tab" data-toggle="tab"><?php echo $item['title']; ?></a></li>
                <?php 
                    }
                }
                ?>
            </ul>
            <div class="tab-content">
                <?php 
                if($this->value('tabs')){
                    foreach($this->value('tabs') as $index => $item) {
                        $active_class = '';
                        if ($index == 0) {
                            $active_class = ' in active';
                        }
                ?>
                <div role="tabpanel" class="tab-pane fade<?php echo $active_class; ?>" id="tab-<?php echo $this->value('modules-id');?>-<?php echo $index; ?>">
                    <?php echo wpautop($item['content']); ?>
                </div>
                <?php 
                    }
                }
                ?>
            </div>
        </div>
    </div>
    <style>
    .nav-tabs li.active a {
        /* 添加选项卡被激活时的样式 */
        background-color: var(--theme-color);
        border-color: var(--theme-color);
        color: white;
    }
    </style>
    <script>
    jQuery(document).ready(function($) {
        var currentIndex = 0;
        var numTabs = <?php echo count($this->value('tabs')); ?>;
        var intervalId; 

        // 激活第一个tab
        $('#tabs-<?php echo $this->value('modules-id'); ?> a:first').tab('show');

        // 每隔3秒切换
        intervalId = setInterval(function() {
            $('#tabs-<?php echo $this->value('modules-id'); ?> li:eq(' + currentIndex + ') a').tab('show');
            currentIndex = (currentIndex + 1) % numTabs;
        }, 3000);

        // 鼠标移动上去后停止切换
        $('#tabs-<?php echo $this->value('modules-id'); ?> li').hover(
            function() {
                clearInterval(intervalId);
            },
            function() {
                intervalId = setInterval(function() {
                    $('#tabs-<?php echo $this->value('modules-id'); ?> li:eq(' + currentIndex + ') a').tab('show');
                    currentIndex = (currentIndex + 1) % numTabs;
                }, 2000);
            }
        );
    });
</script>
<?php 
} 


}

register_module( 'WPCOM_Module_zke_tabs' );

 

二、Filps翻转模块

这个模块主要实现的是3D反转,可设置背景渐变等,可选择横向或纵向的翻转,效果如下所示:

<?php
class WPCOM_Module_zke_flips extends WPCOM_Module {
    function __construct() {
        $options = array(
            array(
                'tab-name' => '翻转内容',
                'mobile-hide' => array(
                'name' => '移动端隐藏',
                'type' => 't',
                'desc' => '开启则在移动端不显示'
            ),
                'enable-flip' => array(
                    'name' => '开启翻转',
                    'type' => 't',
                    'value' => 1,
                    'desc' => '开启后将展示正反两面内容'
                ),
                'front-content' => array(
                    'name' => 'HTML代码',
                    'type' => 'ta',
                    'rows' => 20,
                    'code' => ''
                ),
                'back-content' => array(
                    'name' => 'HTML代码',
                    'type' => 'ta',
                    'rows' => 20,
                    'code' => ''
                ),
                'content-margin' => array(
                    'name' => '内容外边距',
                    'type' => 'trbl',
                    'mobile' => 1,
                    'use' => 'tb',
                    'desc' => '和上下模块/元素的间距',
                    'units' => 'px, %, vw, vh',
                    'value'  => apply_filters('module_default_margin_value', '10px')
                ),
                'content-padding' => array(
                    'name' => '内容内边距',
                    'type' => 'trbl',
                    'mobile' => 1,
                    'desc' => '模块内容区域与边界的距离',
                    'units' => 'px, %, vw, vh',
                    'value'  => '10px'
                )
            ),
            array(
                'tab-name' => '风格样式',
                'direction' => array(
                    'name' => '翻转方向',
                    'type' => 'select',
                    'options' => array(
                        'lr' => '从左到右',
                        'rl' => '从右到左',
                        'tb' => '从上到下',
                        'bt' => '从下到上',
                    ),
                    'value' => 'tb',
                    'desc' => '选择翻转的方向',
                ),

                'margin' => array(
                    'name' => '模块外边距',
                    'type' => 'trbl',
                    'mobile' => 1,
                    'use' => 'tb',
                    'desc' => '和上下模块/元素的间距',
                    'units' => 'px, %, vw, vh',
                    'value'  => apply_filters('module_default_margin_value', '10px')
                ),
                'padding' => array(
                    'name' => '模块内边距',
                    'type' => 'trbl',
                    'mobile' => 1,
                    'desc' => '模块内容区域与边界的距离',
                    'units' => 'px, %, vw, vh',
                    'value'  => '10px'
                ),
                'front-bg-color' => array(
                    'name' => '正面背景颜色',
                    'type' => 'color',
                    'gradient' => 1
                ),
                'back-bg-color' => array(
                    'name' => '反面背景颜色',
                    'type' => 'color',
                    'gradient' => 1
                )
            )
        );
        parent::__construct('zke_flips', 'ZK翻转卡片', $options, 'horizontal_split', '/themer/mod-my-module.png');
    }

   function style( $atts ) {
            // 获取前面和后面的背景颜色
            $front_bg_color = WPCOM::gradient_color($this->value('front-bg-color'));
            $back_bg_color = WPCOM::gradient_color($this->value('back-bg-color'));
        
            // 根据翻转方向定义样式属性
            $direction = $this->value('direction');
            switch ($direction) {
                case 'lr':
                    $default_back_transform = 'translateX(110px) rotateY(-90deg)';
                    $front_transform = 'translateX(-110px) rotateY(90deg)';
                    $back_transform = 'translateX(0) rotateY(0)';
                    
                    break;
                case 'rl':
                    $default_back_transform = 'translateX(-110px) rotateY(90deg)';
                    $front_transform = 'translateX(110px) rotateY(-90deg)';
                    $back_transform = 'translateX(0) rotateY(0)';
                    break;
                case 'bt':
                    $default_back_transform = 'translateY(110px) rotateX(-90deg)';
                    $front_transform = 'translateY(-110px) rotateX(90deg)';
                    $back_transform = 'translateY(0) rotateX(0)';
                    break;
                case 'tb':
                    $default_back_transform = 'translateY(-110px) rotateX(90deg)';
                    $front_transform = 'translateY(110px) rotateX(-90deg)';
                    $back_transform = 'translateY(0) rotateX(0)';
                    break;
            }
        
            // 定义样式属性
            return array(
                'front-bg-color' => array(
                    '.front-flip ' => $front_bg_color
                ),
                'back-bg-color' => array(
                    '.back-flip ' => $back_bg_color
                ),
                'padding' => array(
                    '.container-inner' => 'padding: {{value}};'
                ),
                'margin' => array(
                    '.container-inner' => 'margin: {{value}};'
                ),
                'content-margin' => array(
                    '.front-content,.back-content' => 'margin: {{value}};'
                ),
                'content-padding' => array(
                    '.front-content,.back-content' => 'padding: {{value}}; '
                ),
                'enable-flip' => $this->value('enable-flip') ? array(
                    '*' => 'margin:0;padding:0;box-sizing:border-box;',
                    '.zke-flips-block' => 'display:flex;flex-wrap:wrap;justify-content:center;',
                    '.zke-flips' => 'width:100%;height: 100%;margin:10px;text-align:center;position:relative;transform-style:preserve-3d;perspective:3000px;',
                    '.zke-flips .front-flip' => 'width:100%;height: 100%;display:flex;flex-direction:column;justify-content:center;box-shadow:0 5px 20px rgba(0,0,0,0.1);transition:0.5s ease;',
                    '.zke-flips .back-flip' => 'position:absolute;top:0;left:0;z-index:1;width:100%;height: 100%;color:#fff;opacity:0;transform:'.$default_back_transform.';transition:0.5s ease;',
                    '.zke-flips:hover .front-flip' => 'opacity:0;transform: ' . $front_transform . ';',
                    '.zke-flips:hover .back-flip' => 'opacity:1;transform: ' . $back_transform . ';'
                    
                ) : '',
                'mobile-hide' => array(
                    '@[(max-width: 767px)]' =>  $this->value('mobile-hide') ? 'display: none;' : ''
                )
            );
        }


        function template( $atts, $depth ) {
            if(function_exists('wpcom_module_title')){
                wpcom_module_title($this->value('title'), $this->value('sub-title'));
            } ?>
        
            <div class="zke-flips-block">
                <div class="zke-flips <?php echo $this->value('direction'); ?>">
                    <div class="front-flip">
                        <div class="front-content"><?php echo wpautop($this->value('front-content')); ?></div>
                    </div>
                    <div class="back-flip">
                        <div class="back-content" ><?php echo wpautop($this->value('back-content')); ?></div>
                    </div>
                </div>  
            </div>
        <?php
        }

}

register_module( 'WPCOM_Module_zke_flips' );

 

本文作者:𝙕𝙆𝘾𝙊𝙄

文章名称:JustNews主题可视化编辑器Filps翻转模块和Tab切换模块

文章链接:https://www.zkcoi.com/365up/program/2691.html

本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
𝙕𝙆𝘾𝙊𝙄𝙕𝙆𝘾𝙊𝙄
上一篇 2023年6月9日 下午7:39
下一篇 2023年6月29日 下午5:04

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

私聊博主

立即联系
一般有空就回复

qrcode_web

微信扫码联系我

分享本页
返回顶部