首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jQuery动画WPForms隐藏/条件字段

使用jQuery动画WPForms隐藏/条件字段
EN

Stack Overflow用户
提问于 2020-01-03 22:44:50
回答 1查看 1.1K关注 0票数 2

我在我的WPForms站点上使用WordPress插件。我的表单之一有一个隐藏字段,当您单击窗体上的其他地方的单选按钮时,该字段会出现,当您单击另一个单选按钮时,该字段会再次消失。

隐藏字段在隐藏时有一个.wpforms-conditional-hide类,该类设置为display:none。当字段显示时,类神奇地更改为.wpforms-conditional-show,该属性被设置为display:block

我想动画这个领域的隐藏和显示,例如,让它滑进和退出视野。我不能使用CSS,因为CSS不能使用"display“属性进行动画/转换,并且隐藏字段没有设置的高度。我已经有jQuery在我的网站上,所以我想找到一个方法来实现这一点与jQuery,例如。使用类似于slideToggle或类似的东西。

问题是,我不想将动画绑定到单选按钮上的单击操作。特别是因为我希望它能够在任何形式的隐藏域上工作。因此,如果可能的话,当隐藏字段的类从slideToggle更改到.wpforms-conditional-show和back时,或者当隐藏字段的CSS属性从display:none更改到display:block和back时,我只想使用一种方法(或类似的方法)。

这有可能吗?

更新

为了记录在案,这里是我现在使用的整个函数,它包含了@blex提供了他的答案和评论的代码和建议。下面的函数将与WPForms在WordPress上“按原样”工作。

代码语言:javascript
复制
function slide_hidden_wpforms_fields() {
if ( wp_script_is( 'jquery', 'done' ) ) {
?>
<script type="text/javascript">
jQuery( document ).ready(function( $ ) {
$( document ).one( "wpformsProcessConditionals", function() {
    var classname = 'wpforms-conditional-show';
    $( '.wpforms-field' ).each( function( i, el ) {
        var wasVisible = $( el ).hasClass( classname );
        var obs = new MutationObserver( function( mutations ) {
            mutations.forEach( function( mutation ) {
                if ( mutation.attributeName === 'class' ) {
                    isVisible = $( el ).hasClass( classname );
                    if ( isVisible !== wasVisible ) {
                        wasVisible = isVisible;
                        $( el )[isVisible ? 'hide' : 'show']().slideToggle( 200 );
                    }
                }
            });
        });
        obs.observe( el, {
            'attributes': true
        });
    });
});
});
</script>
<?php
}
}
add_action( 'wpforms_wp_footer_end', 'slide_hidden_wpforms_fields' );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-03 23:22:43

编辑全文并粘贴答案,见@GermanKiwi's

您可以使用突变观察者来检测类的更改。下面是一个示例:

代码语言:javascript
复制
var classname = 'wpforms-conditional-show';
// For each input (use your own selector)
$('input').each(function(i, el) {
  // Save its state
  var wasVisible = $(el).hasClass(classname);
  // Create a mutation observer
  var obs = new MutationObserver(function(mutations) {
    // When mutations are received, for each of them
    mutations.forEach(function(mutation) {
      // If the mutation is a change of class
      if (mutation.attributeName === 'class') {
        // Check the presence of that class
        isVisible = $(el).hasClass(classname);
        // If that changed (and only for this specific class)
        if (isVisible !== wasVisible) {
          // Update the state
          wasVisible = isVisible;
          // Hide the element before sliding it down, or vice versa
          $(el)[isVisible ? 'hide' : 'show']().slideToggle(200);
        }
      }
    });
  });
  // Start the observer
  obs.observe(el, {
    'attributes': true
  });
})

// Just for the demo
var i = 0,
    inputs = $('input');
setInterval(function(){inputs.eq(i).toggleClass(classname);i=(i+1)%inputs.length;},100);
代码语言:javascript
复制
input { display: none; }
.wpforms-conditional-show { display: block; }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" placeholder="Hello">
<input type="text" placeholder="World">
<input type="text" placeholder="And">
<input type="text" placeholder="Welcome">

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59586229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档