changeAnimation() {
this.viewShow = false;
setTimeout(() => {
this.viewShow = true;
}, (this.animationDuration / 100) * 75);
this.animationArr = [
`0% {
left: ${String(window.$clientX) ? window.$clientX + "px" : "0%"};
top: ${String(window.$clientY) ? window.$clientY + "px" : "100%"};
width: 0px;
;
opacity: 0.5;
`100% {
left: ${this.left};
top: ${this.top};
width: ${this.width};
height: ${this.height};
opacity: 1;
let selector = ".no_router_popup_animation";
this.changeKeyframes(selector, "noRouterPopup", this.animationArr);
findNoLinkSheet() {
var styleSheets = document.styleSheets;
console.log("进入了findNoLinkSheet",styleSheets);
let ssLength = styleSheets.length;
for (var i = 0; i < ssLength; i++) {
try {
styleSheets[i].cssRules || styleSheets[i].rules;
if (!styleSheets[i].cssRules && !styleSheets[i].rules) {
continue;
} catch {
continue;
this.sheetsIndex = i;
console.log("this.sheetsIndex", this.sheetsIndex);
break;
addKeyframes(selector, animName, AnimationArr) {
var styleSheets = document.styleSheets;
let animationString = "";
AnimationArr.forEach((item) => {
animationString += item;
});
let Keyframes = `@keyframes ${animName}{${animationString}}`;
console.log("Keyframes");
if (styleSheets[this.sheetsIndex].appendRule) {
styleSheets[this.sheetsIndex].insertRule =
styleSheets[this.sheetsIndex].appendRule;
styleSheets[this.sheetsIndex].insertRule(Keyframes);
console.log(
"styleSheets[this.sheetsIndex]",
styleSheets[this.sheetsIndex]
this.animationName = animName;
let selectorDom = document.querySelectorAll(selector);
selectorDom[selectorDom.length - 1].style.animationDuration =
this.animationDuration + "ms";
selectorDom[
selectorDom.length - 1
].style.animationName = this.animationName;
findKeyframesRule(animName) {
var styleSheets = document.styleSheets;
let ssLength = styleSheets.length;
for (var i = 0; i < ssLength; i++) {
try {
styleSheets[i].cssRules || styleSheets[i].rules;
if (!styleSheets[i].cssRules && !styleSheets[i].rules) {
continue;
} catch {
continue;
var oRules = styleSheets[i].cssRules
? styleSheets[i].cssRules
: styleSheets[i].rules;
let oRulesLength = oRules.length;
for (var x = 0; x < oRulesLength; x++) {
if (!oRules[x].name) {
continue;
let rule = oRules[x];
if (
String(rule.name).indexOf(animName) != -1 &&
(rule.type == CSSRule.KEYFRAMES_RULE ||
rule.type == CSSRule.WEBKIT_KEYFRAMES_RULE)
return this.findKeyframesCallBack(oRules, animName, x);
* @name: 递归查找keyframes
* @test: test font
* @msg:
* @param {*} oRules document.styleSheets[i].cssRules||document.styleSheets[i].rules
* @param {*} animName 修改的动画名称
* @param {*} index cssRules或rules数组下标
* @param {*} ruleArr 保存具有与animName的keyframes数组
* @return {*} ruleArr
findKeyframesCallBack(oRules, animName, index, ruleArr = []) {
let ruleItem = oRules[index];
if (
String(ruleItem.name).indexOf(animName) != -1 &&
(ruleItem.type == CSSRule.KEYFRAMES_RULE ||
ruleItem.type == CSSRule.WEBKIT_KEYFRAMES_RULE)
this.animationName = ruleItem.name;
this.keyframeIndex = index;
ruleArr.push(ruleItem);
return this.findKeyframesCallBack(oRules, animName, index + 1, ruleArr);
} else {
return ruleArr;
changeKeyframes(selector, animName, AnimationArr) {
var keyframesArr = [];
try {
keyframesArr = this.findKeyframesRule(animName);
} catch {
return;
if (!keyframesArr) {
console.log("!keyframesArr", !keyframesArr);
this.findNoLinkSheet();
this.addKeyframes(selector, animName, AnimationArr);
return;
const keyframesArrLength = keyframesArr.length;
for (var k = 0; k < keyframesArrLength; k++) {
if (!keyframesArr[k].deleteRule) {
keyframesArr[k].deleteRule = keyframesArr[k].removeRule;
keyframesArr[k].deleteRule("0%");
keyframesArr[k].deleteRule("100%");
if (keyframesArr[k].appendRule) {
keyframesArr[k].insertRule = keyframesArr[k].appendRule;
AnimationArr.forEach((item) => {
keyframesArr[k].insertRule(item);
});
var styleSheets = document.styleSheets;
let selectorDom = document.querySelectorAll(selector);
selectorDom[selectorDom.length - 1].style.animationDuration =
this.animationDuration + "ms";
selectorDom[
selectorDom.length - 1
].style.animationName = this.animationName;
css3中@keyframes是写死的,如果需要动态修改则需要js,其实操作起来也很简单,只是一些用到了一些不常用的api1、获取页面样式表并查找keyframes所在的styleSheet2、删除原来的styleSheet里的动画帧3、添加js动态修改过后的动画帧实现三个步骤的代码1、关于获取styleSheet这里给出了一个通用方法functionfindKeyframesRule(rule)...
在css3中,我们可以通过@keyframes创建关键帧动画效果。我们需要将@keyframes绑定到选择器中,否则不会有效果出现。同时,我们还需定义动画时长和动画名称
CSS Code复制内容到剪贴板
@keyframes animationname {keyframes-selector {css-styles;}}
vue动画特效-渐变动画和@keyframes过渡原理实现@keyframes动画使用animated.css同时使用过渡和@keyframes动画
今天学习vue的动画的时候,感觉机制有点繁琐,总结一下。
Vue里使用动画需要用到一个封装好的组件<transition>,Vue官方文档是这么介绍的:
Vue 提供了 <transition>的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡
条件渲染 (使用 v-if)
条件展示 (使用 v-show)
CSS3中增加了@keyframes规则用于创建动画,创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式。也就是说通过改变CSS样式而达到动画的效果,所以,要动态去改变动画,只有修改样式。
你可以打印一下document.styleSheets,console.log(document.styleSheets),会发现document.styleSheets是一个对象数组。
拿到样式表后就可以操作样式啦~
insertRule方法用来给当前样式表插入新的样式规则。举个栗子:
var style =
document.styleSheets[0].insertRule(`
@-webkit-keyframes ani${index}{ from{ top:150px;left:150px } to { top:${item.y}px;left:${item.x}px }}
@-moz-keyframes ani${index}{ from{ top:150px;left:150px } to..
路易斯维尔代码JavaScript项目
Rick Sweeney为Code Louisville创作的Golden Anniversary Hits网站项目
提示输入密码:接受以下内容:
该项目利用了跟踪技术。
标题与导航选项垂直对齐。 但是通过@media查询,当视口增加到769px时,切换到标题下方的导航选项的水平对齐方式,并在视口大小增加到1025px或更高时将导航选项移动到与标题名称相同的行。
当指针悬停在Banner上时,Banner使用CSS @keyframes和:hover伪类为徽标设置动画。
具有每月点击量“日历”的主要内容部分:
* demonstrates use of flexbox to expand vertical mobile alignment into rows as increased viewport space allows.
其他Jav
三. 技术分析
其中运动ball是反复重复一个动作运动,不能使用transition渐变方式写,因为transition只能执行一次渐变效果,重复运动最佳的方式就是采用animation。
四. 问题
@keyframes写在css中是写死的,此时需要结束js操作@keyframes,那js是如何操作@keyframes呢,下面是我花了一天查询资料加上自己的摸索,解决了兼容IE的解决方案。
五. js操