Jquery.transform.js
jQuery cssHooks adding a cross browser transform property to $.fn.css() and $.fn.animate()
Install / Use
/learn @louisremi/Jquery.transform.jsREADME
jquery.transform2d.js adds 2d transform capabilities to jQuery css() and animate() functions.
Usage:
Set transform with a string
$(elem).css('transform', 'translate(50px, 30px) rotate(25deg) scale(2,.5) skewX(-35deg)');
$(elem).animate({transform: 'translateY(-100px) rotate(1rad) scaleX(2) skewY(42deg)'});
You can use the following list of transform functions:
translateX(<number>px)translateY(<number>px)- combined:
translate(<number>px, <number>px)the second number is optional and defaults to 0 scaleX(<number>)scaleY(<number>)- combined:
scale(<number>, <number>)the second number is optional and defaults to the value of the first one rotate(<angle>)units for angles are rad (default), deg or grad.skewX(<angle>)skewY(<angle>)matrix(<number>, <number>, <number>, <number>, <number>, <number>)*
*matrix gives you more control about the resulting transformation, using a matrix construction set.
When using it in animations however, it makes it impossible to predict how the current and target transformations are going to be interpolated; there is no way to tell whether elements are going to rotate clockwise or anti-clockwise for instance.
Get transform
returns a computed transform matrix.
$(elem).css('transform') == 'matrix(0,1,-1,0,100,50)';
Relative animations
Relative animations are possible by prepending "+=" to the transform string.
$(elem).css('transform', 'rotate(45deg)');
// using the following syntax, elem will always rotate 90deg anticlockwise
$(elem).animate({transform: '+=rotate(-90deg)'});
Limitations:
- requires jQuery 1.4.3+,
- Should you use the translate property, then your elements need to be absolutely positionned in a relatively positionned wrapper or it will fail in IE,
- transformOrigin is not accessible.
Why such restrictions with 'translate'?
Since translate is unavailable in IE<9, we have to emulate it using top and left properties of the element style.
This can, of course, only work if the elements are absolutely positionned in a relatively positionned wrapper.
Other plugins position the elements and wrap them transparently.
I think that transparently messing with the DOM often introduces unpredictible behavior.
Unpredictible behavior leads developpers to fear plugins.
Fear leads to anger. Anger leads to hate. Hate leads to suffering.
I prefer leaving this up to you.
License
Dual licensed under GPL and MIT licenses.
Copyright (c) 2010 Louis-Rémi Babé.
Related Skills
node-connect
346.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
107.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
346.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
346.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
