首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSS/jQuery动画定位问题

问CSS/jQuery动画定位问题
EN

Stack Overflow用户
提问于 2014-10-24 20:09:28
回答 1查看 167关注 0票数 4

我一直在用CSS转换和jQuery测试动画。其思想是向用户显示一组可单击的div,以加载新页面。一旦一个div被点击,它就会展开来填充整个屏幕,然后“加载”下一页。

下面是我想要达到的目标的一个模型:

​

​

我设置它的方式是,让每个div相对定位,然后让每个div一起坐到一起。然后,一旦一个div被点击,我‘褪色’的div分开,没有被点击,并展开点击的div。问题是,当div点击不是第一次(即蓝色或绿色),它最终会‘抓拍’到左手边,然后展开。当然,这种情况会发生,因为定位设置为相对位置。

代码语言:javascript
复制
position: relative;

在这里可以看到这方面的例子:http://codepen.io/anon/pen/eKynL

为了解决这个问题,我建立了绝对定位的div。动画按照我想要的那样完美地工作,但是我不喜欢这样一个事实:由于绝对定位,我必须分别定位每个div的左上方,加上div不会在窗口调整大小时自动移动到新行。

代码语言:javascript
复制
position: absolute;

在这里可以看到这方面的例子:http://codepen.io/anon/pen/jIqcL

我不确定是否有任何方法可以改变我的实现来改进它并使它更易于维护(特别是div的内联样式)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-25 03:09:15

我使用您的position:relative; (http://codepen.io/anon/pen/eKynL)作为源:

​

代码语言:javascript
复制
$(document).ready(function() {
  $('.mydiv').click(function() {
    if(!$(this).hasClass('clicked')) {
      var clicked_div = $(this);
      clicked_div.addClass('clicked');
      clicked_div.find('h1').fadeOut(150);

      $('.mydiv').not('.clicked').addClass('hide'); //<----CHANGED LINE
      clicked_div.addClass('animate');

      $('.loading').css('opacity', 1);

      setTimeout(function() {
        $('.mydiv').not('.clicked').css('display','none'); //<----NEW LINE
        $('.loading').css('opacity', 0);
        clicked_div.addClass('blog-post');
        clicked_div.find('h1').fadeIn(150);
        $('.blog-content').addClass('active');
      }, 1500);
    }
  });
});
代码语言:javascript
复制
*,*:before,*:after {
  box-sizing: border-box;
}
html, body {
  width: 100%;
  height: 100%;
  position: relative;
  padding: 0;
  margin: 0;
  overflow: hidden;
}
.mydiv {
  width: 200px;
  height: 200px;
  background-color: #bada55;
  position: relative;
  float: left;
  left: 0;
  top: 0;
  transition: width 0.5s, height 0.5s, left 0.5s, top 0.5s, opacity 0.25s; /*<----ADDED 'opacity'*/
}
.mydiv h1 {
  position: absolute;
  bottom: 0;
  left: 10px;
  color: #fff;
  font-family: sans-serif;
}
.teal {
  background-color: teal;
}
.orange {
  background-color: orange;
}

/*-----NEW CODE---------------------------------*/
.mydiv.hide {
  width: 0px;
  height: 0px;
  opacity: 0;
}
/*----------------------------------------------*/

.mydiv.animate {
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
}

.mydiv.blog-post {
  width: 50%;
}

.blog-content {
  background-color: #efefef;
  width: 50%;
  height: 100%;
  position: absolute;
  right: 0;
  top: 100%;
  transition: top 0.5s;
  font-family: sans-serif;
  color: #3c3c3c;
  font-size: 30px;
  padding: 20px;
}

.blog-content.active {
  top: 0%;
}

.loading {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto 0;
  width: 100%;
  height: 100px;
  text-align: center;
  font-family: sans-serif;
  font-size: 30px;
  font-weight: bold;
  color: #fff;
  opacity: 0;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="mydiv">
  <h1>Green</h1>
</div>
<div class="mydiv teal">
  <h1>Teal</h1>
</div>
<div class="mydiv orange">
  <h1>Orange</h1>
</div>

<div class="loading">Loading...</div>
<div class="blog-content">
  Content
</div>

​

codepen: http://codepen.io/anon/pen/lFIhH

在CSS中,我只添加了以下内容:

代码语言:javascript
复制
.mydiv {
  ...
  transition: ..., opacity 0.25s;
}

.mydiv.hide {
  width: 0px;
  height: 0px;
  opacity: 0;
}

在JS中,

我改变了这句话:

$('.mydiv').not('.clicked').fadeOut(150, function() {

至

$('.mydiv').not('.clicked').addClass('hide');

并在setTimeout函数中添加了这一行:

$('.mydiv').not('.clicked').css('display','none');

它的工作方式如下:

  1. 同时,当单击的div获得.animate-class时,未单击的divs获得.hide-class。
  2. 现在,当单击的div正在动画化以填充页面时,另一个divs正在动画化以消失(使用width/height和opacity)。
    • 所有width/height转换的速度都是相同的,因此当单击的div增长时,另一个divs会收缩,单击的div不会向左/顶部移动。
    • 未单击的opacity的divs转换速度要快一些(0.25s),以创建(似乎)与原始代码页中相同的结果(即未单击的div在单击div展开之前消失)。

​

  1. 最后(在setTimeout函数中),对于未单击的divs,display设置为none,以完成手动淡出。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26555481

复制
相关文章

相似问题

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