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

一、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' );
本文作者:ZKCOI
文章名称:JustNews主题可视化编辑器Filps翻转模块和Tab切换模块
文章链接:https://www.zkcoi.com/365up/program/2691.html
本站资源仅供个人学习和交流,如若转载,请注明出处,详见《免责声明》。
微信扫一扫
支付宝扫一扫
