在CSS转换期间显示元素的大小值
Show size value of element during CSS transition
当用户滚动到我页面上的某个元素时,我会添加一个类,它会启动一个宽度为0%的动画。例如,我从0%开始,然后上升到99%。当这个动画化时,有没有一种方法可以在HTML中显示这个宽度递增的页面,即这个值递增的<p>
标记?CSS就是这样,当用户使用Javascript滚动到它时,我添加了class.active。
.graph-horiz-bar__bar{
background:$niagara;
top:0px;
position:absolute;
left:0px;
width:0;
height:100%;
transition: width 0.3s;
}
.graph-horiz-bar__bar.active{
width:100%;
transition: width 0.3s;
}
var div = document.getElementById("yourDiv"), parapgraph = document.getElementById("yourParagraph");
setInterval(function(){
paragraph.innerHTML = div.offsetWidth + "px";
}, 20);
这将段落内容设置为每20毫秒div的宽度。
最简单的方法是使用jQuery .animate()
设置元素宽度的动画,并从step:
参数回调中读取当前宽度(读取文档)。。。
使用CSS3转换:
var $bar = $("#bar"),
$currWidth = $("#currWidth"),
itv = null;
$("#bar").on({
// START COUNTING THE WIDTH
// I used a custom "start" event cause currently (2016)
// Event.transitionstart is implemented only in IE10+, Edge
start : function(){
$(this).addClass("active");
itv = setInterval(function(){
$currWidth.text($bar[0].offsetWidth);
},10);
},
// STOP COUNTING THE WIDTH
transitionend : function() {
clearInterval(itv);
$currWidth.text("INTERVAL STOPPED");
}
});
$("#start").on("click", function(){ // CLICK JUST FOR DEMO,
// You need to place this trigger inside your inViewport method
// when the element enters the viewport
$bar.trigger("start"); // <<----------------
});
#bar{
height: 20px;
width:0;
background:red;
transition: 3s;
}
#bar.active{
width:100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="start">ACTIVATE BAR</button><!-- TRIGGER BUTTON JUST FOR DEMO -->
width <span id="currWidth">0</span>
<div id="bar"></div>
当transitionstart
将由所有主要浏览器实现时,代码看起来很像:
var itv;
$("#bar").on({
transitionstart: function(){
itv = setInterval(function(){
console.log( $bar[0].offsetWidth );
},10);
},
transitionend : clearInterval(itv)
});
$("#bar").addClass("active"); // place this call where needed
也许在另一个星系的某一天,像transitionstep
这样的事件可能就是一切。。。。
$("#bar").on("transitionstep", function(){ // :(
console.log( this.offsetWidth );
});
相关文章:
- 在JavaScript中,如何修复元素显示和变量创建之间的初始差异
- 使用漂亮的照片点击另一个元素显示图像
- 我将如何在 HTML 中将数组中的所有元素显示为可点击的对象
- 使元素显示在最小屏幕大小上
- 更好的做法是通过CSS类或直接(通过DOM)修改HTML元素显示
- 如何在YouTube视频前制作元素显示
- 使隐藏元素显示 X 秒
- 如果元素显示:无;在媒体查询中,它们是否仍然加载
- 无法为每个元素显示高图
- 如何使用 jQuery 逐个元素显示
- 使用 jQuery 画布元素显示 Hiddin Div
- '李'mouseover事件被child'a'元素显示块
- JQuery元素显示/隐藏和控制流
- D3在工具提示上将内部列表的元素显示为不同的行
- AngularJS-动态创建<text区域>使用ngSanitize不会't显示(其他元素显示)
- 如何根据单击的元素的位置使元素显示在右侧或左侧
- 响应元素显示:无;在移动宽度,然后通过javascript按钮返回,但显示的链接断开:block;
- 当我再次单击时,它显示none,高度回到0px,但里面的元素显示,不显示none或离开页面
- 将一个元素显示在另一个元素的顶部,并在其上禁用鼠标悬停事件
- reactjs:为什么在render中定义的一些dom元素显示两次