更改:将鼠标悬停在移动/触摸设备上的点击/点按功能无效

时间:2015-05-24 09:39:28

标签: javascript jquery html css css3

所以,我正在尝试使用Modernizr的:hover / no-touch类将touch函数更改为单击函数,以用于页面上的特定元素(标题)。从理论上讲,这应该可行,但不知何故,它只能在移动/触摸设备上只能点击一次,这意味着如果我再次点击/点按它,它就不会“悬停” 即可。我可以通过点击页面上的其他元素来“取消悬停”,但非常希望在<figure>再次点击/点击时标题消失。

如果我更改了js以便no-touch设备必须点击,那么它可以正常工作。我在这里缺少什么?

小提琴:https://fiddle.jshell.net/bh3aLkcL/3/

我担心我的js技能很差,至少可以说(读:不存在),而且我一直在使用其他帖子的片段:Change hover interaction to click for touch screen devices

其余的工作,所以这只是一件事。非常感谢任何帮助!

使用Javascript:

// For hovering becoming click via Modernizr
//$('body').hasClass('no-touch') ? event = 'mouseenter mouseleave' : event = 'click';
!$('body').hasClass('no-touch') ? event = 'mouseenter mouseleave' : event = 'click';

$('.design-section figure').on(event, function () {
$(this).toggleClass('open');
});

HTML:

<section id="work" class="content-section text-left" data-offset="100px">
<div class="design-section">
    <div class="container">
        <div class="col-lg-8 col-lg-offset-2">
            <img src="http://cutepuppyclub.com/wp-content/uploads/2015/05/White-Cute-Puppy-.jpg" width="100%" class="img-responsive" alt="Playing the dilemma game">
            <figure>
                <figcaption>
                    <p>test text</p>
                </figcaption>
            </figure>
       </div>
    </div>
</div>
</section>

CSS:

figure {
    padding: 0;
    margin-top: 0;
    position: relative;
    display: block;
    overflow: hidden;
}

figcaption {
    position: absolute;
    background: rgba(0,0,0,.3);
    color: #fff;
}

figure.open figcaption {
    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
    filter: alpha(opacity=100);
    opacity: 1;
}

.design-section figcaption {
  opacity: 0;
  bottom: -30%; 
  left: 0;
  -webkit-transition: all 0.6s ease;
  -moz-transition:    all 0.6s ease;
  -o-transition:      all 0.6s ease;
  padding: 0;
  width:100%;
  display:block;
}

.design-section figure {
    height:120px;
    margin-top:-120px;
    z-index:1;
}

.design-section img {
    padding-top:0;
    margin-top:14px;
    z-index:0;
}

.design-section figcaption p {
    margin:0;
    padding: 1.5% 2.5%;
    font-size:15px;
}

.design-section figure.open figcaption{
    bottom: 0;
}

P.S。我正在使用Bootstrap,但在这件事情上不应该说什么。

2 个答案:

答案 0 :(得分:3)

您不需要使用Modernizr来检查触摸事件,您可以this way执行此操作:

var event = ('ontouchstart' in window) ? 'click' : 'mouseenter mouseleave';

$('.design-section figure').on(event, function () {
    $(this).toggleClass('open');
});

另外,您使用Conditional (ternary) Operator是错误的,我修复了它。阅读right syntax

答案 1 :(得分:0)

您可以将多个事件指定为参数,因此只需添加touchstart即可在用户点击移动设备时添加操作。

$('.design-section figure').on('mouseover mouseout touchstart', function () {
    $(this).toggleClass('open');
});