zim实现线条跟踪banner效果
代码语言:html
所属分类:多媒体
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/createjs.min.js"></script>
<script src="http://repo.bfw.wiki/bfwrepo/js/zim-min.js"></script>
<script src="http://repo.bfw.wiki/bfwrepo/js/pizzazz_03.js"></script>
<script>
// SCALING OPTIONS
// scaling can have values as follows with full being the default
// "fit" sets canvas and stage to dimensions and scales to fit inside window size
// "outside" sets canvas and stage to dimensions and scales to fit outside window size
// "full" sets stage to window size with no scaling
// "tagID" add canvas to HTML tag of ID - set to dimensions if provided - no scaling
var scaling = "banner"; // target the banner tag
var width = 1000;
var height = 150;
var color = dark;
var outerColor = dark;
// as of ZIM 5.5.0 you do not need to put zim before ZIM functions and classes
var frame = new Frame(scaling, width, height, color, outerColor);
frame.on("ready", function() {
zog("ready from ZIM Frame"); // logs in console (F12 - choose console)
const stage = frame.stage;
const stageW = frame.width;
const stageH = frame.height;
// the general idea is we have two ZIM Frame objects each with their own canvas and stage
// the first we see to start and it is scaled to fit in the div with id=banner
// this frame is interactive
// the second is a full window frame and it is not interactive
// this allows us to interact with the HTML
// we made it not interactive by turning off the canvas pointerEvents
// we hide and show the content when we press anywhere on the banner
// we could have made a button, etc.
// BTW - we can certainly make objects travel along paths see https://zimjs.com/nio/
// here we wanted to give the illusion of a continuous path so used ZIM Noise.
// make the animated backing lines with ZIM Pizzazz - see imported js file for details
pizzazz.makePattern({
type: "stripes",
size: 50,
cols: 20,
colors: series([pink, purple]),
interval: 700
})
.sca(-1, 1) // goes in other direction normally
.alp(.5)
.cur() // pass in any css cursor - default "pointer"
.center();
const icon = frame.makeIcon(null, "#222").pos(20, 0, LEFT, CENTER);
// used the icon size and position but want the backing behind the icon so ord(-1)
// will animate this in later
const backing = new Rectangle(icon.width, icon.height, pink).loc(icon).mov(6, 6).ord(-1).alp(0);
new Label("FOLLOW", 100, "impact", white).alp(.5).noMouse().pos(icon.width+45, 16, LEFT, CENTER);
// constants for animated line
const bumps = 7; // number of bumps
const curve = 60; // "radius" of Bezier handle
const size = 75; // height from center - so max is roughly twice this
const step = .01; // bigger for faster speed
// we make lots of times eventually so make a class
// in the first case it gets a grey fill in the other cases it does not
// segments is what line segment to put the triangle arrow at
// and we are creating this from two different frames with different stages
// if we want the Ticker inside to update the second stage we need the stage
class Line extends Container {
constructor(w, h, fill = true, segment = 4, stage) {
super(w, h); // make the ZIM Container
// the shape object
// this.shape if we want to reference it outside (we do not need to in this case)
// this is a reference to the container we have extended
// which will also hold all the stuff we add here and be the object made from this class
const shape = this.shape = new Shape(w, h).addTo(this);
// the noise object
const noise = this.noise = new Noise();
let j = 0; // second parameter for simplex2D
let count = 0; // ticker count
const arrow = this.arrow = new Triangle(40, 40, 40, white, pink.........完整代码请登录后点击上方下载按钮下载查看
网友评论0