Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
freezeframe
Advanced tools
Freezeframe is a library that automatically pauses animated .gifs and enables them to start animation on mouse hover or click
Freezeframe.js is a library that pauses animated .gifs and enables them to animate on mouse hover / mouse click / touch event, or manually via class methods.
Version 4.x no longer requires or supports jQuery. If you want to use freezeframe as a jQuery plugin, check out freezeframe v3.0.10.
Freezeframe is now built in TypeScript! The library will still support usage in JavaScript, but if your project uses TypeScript, you'll have access to Freezeframe's type definitions, improved input validation, and depending on your IDE/text editor, autocompletion/intellisense.
http://ctrl-freaks.github.io/freezeframe.js/
If your project supports ES6 modules or commonjs modules, install via npm or yarn:
npm install freezeframe
yarn add freezeframe
If not, you can pull in the library from a CDN:
<script src="https://unpkg.com/freezeframe/dist/freezeframe.min.js"></script>
Add freezeframe as a class name on the .gifs you want processed.
( You can optionally use a custom selector as shown in Advanced Usage. )
<img class="freezeframe" src="image.gif" />
It is also possible to put the .freezeframe
class on a parent element containing as many gifs as you want:
<div class="freezeframe">
<img src="image1.gif">
<img src="image2.gif">
<img src="image3.gif">
</div>
If your environment supports commonjs modules (require
) or es6 module imports (import
), you can import freezeframe like so:
// es/ts modules
import Freezeframe from 'freezeframe';
// or commonjs
const Freezeframe = require('freezeframe');
However, if you are using the CDN version, you can just access the global variable, Freezeframe
.
✨ Now time to Freeze those frames ✨
new Freezeframe();
freezeframe.js exposes public methods to allow for more custom integration. You have the option of manually controlling when freezeframe triggers images, adds support elements, and attaches event handlers. You can also manually trigger and release animation on one image or a group of images. These methods are described in detail in the Methods section.
Example: trigger logo .gif and manually trigger / release animation:
// setup freezeframe instance with custom selector and options
const logo = new Freezeframe('#logo', {
trigger: false
});
logo.start(); // start animation
logo.stop(); // stop animation
logo.toggle(); // toggle animation
selector
type: string | Element | HTMLCollectionOf | NodeListOf
default: ".freezeframe"
The selector used to search for .gifs to freeze.
Selector may either be passed as the first argument of the Freezeframe constructor, or as a
property of the options object. You may pass a string selector or a DOM object. If a string
is passed, we use querySelectorAll
to query for the elements.
trigger
type: string | boolean
default: "hover"
options: "hover", "click", false
The trigger event to start animation for non-touch devices.
overlay
type: boolean
default: false
Whether or not to display a play icon on top of the paused image.
responsive
type: boolean
default: true
Whether or not to make the image responsive (100% width)
warnings
type: boolean
default: true
Whether or not to console.warn
if image doesn't appear to be a gif. When using gifs that don't end in .gif
, or animated pngs, you may want to disable these.
Freezeframe(options)
Create a new freezeframe object instance.
Can be passed options. Strings will be interpreted as the selector option.
// Default options
new Freezeframe();
// String as selector
new Freezeframe('.foo');
// DOM object as selector
new Freezeframe(document.querySelector('.foo'));
// Custom options
new Freezeframe({
selector: '.foo',
trigger: 'click',
overlay: true,
responsive: false,
warnings: false
});
// Also valid syntax
new Freezeframe('.foo', {
trigger: 'click',
overlay: true,
responsive: false,
warnings: false
});
start()
Start animation, or restarts animation from the first frame if the .gif is already animating.
// first, save a reference to your freezeframe instance
const ff = new Freezeframe({
trigger: false
});
ff.start();
stop()
Stops animation.
ff.stop();
toggle()
Toggles animation based on its current state.
ff.toggle();
on(event, callback)
Add event listeners to a freezeframe instance.
event
type: string
options: start|stop|toggle
callback
type: function
params:
items: array<freezeframe> | freezeframe
isPlaying: boolean
For example:
ff.on('start', (items) => {
// do something on start
};
ff.on('stop', (items) => {
// do something on stop
};
ff.on('toggle', (items, isPlaying) => {
if (isPlaying) {
// do something on start
} else {
// do something on stop
}
};
And in TypeScript:
import { Freeze } from 'freezeframe/types';
ff.on('start', (items: Freeze[]) => {
// do something on start
};
ff.on('stop', (items: Freeze[]) => {
// do something on stop
};
ff.on('toggle', (items: Freeze[], isPlaying: boolean) => {
if (isPlaying) {
// do something on start
} else {
// do something on stop
}
};
destroy()
Removes all event listeners, but leaves DOM intact.
Use if you are concerned about memory leaks on your event listeners.
ff.destroy();
Assuming you have already read the instructions in the project root:
cd
into the appropriate package directory# start webpack dev server
npm start
# build the project and examples for gh-pages
npm run build
# run unit tests
npm test
Then commit your changes and submit your PR for review.
freezeframe.js is released under the terms of the MIT License.
FAQs
Freezeframe is a library that automatically pauses animated .gifs and enables them to start animation on mouse hover or click
The npm package freezeframe receives a total of 10,153 weekly downloads. As such, freezeframe popularity was classified as popular.
We found that freezeframe demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.