very simple JavaScript / jQuery example: unexpected evaluation order of instructions
When running a script, the browser will usually defer DOM changes to the end to prevent unnecessary drawing. You can force a reflow by reading/writing certain properties:
var container = $('.container').removeClass('active');
var foo = container[0].offsetWidth; //offsetWidth makes the browser recalculate
container.addClass('all-transition');
jsFiddle
Or you can use setTimeout
with a short duration, which does basically the same thing by letting the browser reflow automatically, then adding the class.
Stacking changes to elements in javascript for achieving flawlessly rendered CSS3 transitions
Since your issue is with redrawing/repainting.
How about this
$('#el').css({
top: '150px'
})
.redraw()
.addClass('transition visible');
$.fn.redraw = function(){
$(this).each(function(){
var redraw = this.offsetHeight;
});
return this;
};
http://jsfiddle.net/nCe6n/6/
JavaScript error (Uncaught SyntaxError: Unexpected end of input)
Add a second });
.
When properly indented, your code reads
$(function() {
$("#mewlyDiagnosed").hover(function() {
$("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
}, function() {
$("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
});
MISSING!
You never closed the outer $(function() {
.
When does reflow happen in a DOM environment?
Both articles are correct.
One can safely assume that whenever you're doing something that could reasonably require the dimensions of elements in the DOM be calculated that you will trigger reflow.
In addition, as far as I can tell, both articles say the same thing.
The first article says reflow happens when:
When you retrieve a measurement that must be calculated, such as accessing offsetWidth, clientHeight, or any computed CSS value (via getComputedStyle() in DOM-compliant browsers or currentStyle in IE), while DOM changes are queued up to be made.
The second article states:
As stated earlier, the browser may cache several changes for you, and reflow only once when those changes have all been made. However, note that taking measurements of the element will force it to reflow, so that the measurements will be correct. The changes may or may not not be visibly repainted, but the reflow itself still has to happen behind the scenes.
This effect is created when measurements are taken using properties like offsetWidth, or using methods like getComputedStyle. Even if the numbers are not used, simply using either of these while the browser is still caching changes, will be enough to trigger the hidden reflow. If these measurements are taken repeatedly, you should consider taking them just once, and storing the result, which can then be used later.
I take this to mean the same thing they said earlier. Opera will try its hardest to cache values and avoid reflow for you, but you shouldn't rely on its ability to do so.
For all intents and purposes just believe what they both say when they say that all three types of interactions can cause reflow.
Cheers.
Force Reflow in CSS transitions in Bootstrap
Bit of a late reply, but I'm tackling some issues with CSS transitions which I think relate to this bit of code you've found, and hopefully help you out with understanding it!
Basically, I'm toggling a class from Javascript / jQuery that adds css transitions to a dom element. The CSS of this element is then updated which causes the transition to occur. A simplified version of the code is below:
var myelement = $("myselector");
// Set z-indexes before the transition
myelement.css("z-index", 1);
var reflow = root.offset().left; // Re-flow the page
// Set the transition class on the element which will animate
myelement.addClass("trans");
myelement.css("width", 0 + "px"); // Animate to nothing
So if I uncomment my re-flow line, my transition will occur, but sometimes (it seems more often in safari) the z-index of myelement won't have been updated.
To me, it seems that in certain situations, the styles written to the dom are being buffered somewhere and not being flushed.
That's where the call to the left offset comes in. This is one of the properties that are said to cause a re-flow in the page. This is obviously usually a bad thing performance wise, but it seems necessary to prevent the css transitions picking up the wrong values.
There's an interesting Mozilla bug lodged which discusses the same subject. Might be of some interest. They suggest the addition of an API to properly start transitions from code.
This is also an interesting SO post about forcing re-flows.
Hope this helps! :)
Uncaught SyntaxError: Unexpected token :
I have just solved the problem. There was something causing problems with a standard Request call, so this is the code I used instead:
vote.each(function(element){
element.addEvent('submit', function(e){
e.stop();
new Request.JSON({
url : e.target.action,
onRequest : function(){
spinner.show();
},
onComplete : function(){
spinner.hide();
},
onSuccess : function(resp){
var j = resp;
if (!j) return false;
var restaurant = element.getParent('.restaurant');
restaurant.getElements('.votes')[0].set('html', j.votes + " vote(s)");
$$('#restaurants .restaurant').pop().set('html', "Total Votes: " + j.totalvotes);
buildRestaurantGraphs();
}
}).send(this);
});
});
If anyone knows why the standard Request object was giving me problems I would love to know.
How can (false == false == true) be true
First Case
false == false == true
will be evaluated as
(false == false) == true
because expressions are evaluated from left to right, by default. which reduces to
true == true
since false
is actually equal to false
. That is why it is evaluated to true
.
Second Case
false == (false == true)
is reduced to
false == false
because false
is not equal to true
. That is why the entire expression is true
because false
is equal to false
.
Related Topics
Google Chrome Customize Developer Tools Theme/Color Schema
Highlighting the Clicked Row of a Striped HTML Table
How to Position a Bootstrap Popover
How to Use Bootstrap 3 Together with Jquery Mobile
Convert Gulp Watch in Gulp@3.9.1 to Gulp@4
How to Pass Styles to Child Component and Use It as Scoped Style in Vue
Get Computed Value of CSS Variable That Uses an Expression Like Calc
Different Color Bars for Flot Categories Bar Chart
Chosen Dropdown Within Bootstrap Modal Is Hidden Behind Modal Footer
How to Fix the Bootstrap Navbar to the Top After a Div Was Scrolled
Focusing on Nested Contenteditable Element
How to Know What Elements Are in Current Mouse Position
Spring Not Finding Resource Files (Css, Jsp...)
How to Change Text (Not Font Size) According to Screen Size in CSS