制作一个当宽度改变时的transition过度动画。鼠标移上去时红到黑的球变大一倍。
时间: 2023-09-19 11:07:04 浏览: 46
好的,可以使用CSS3的transition属性和:hover伪类来实现这个效果。以下是代码示例:
HTML代码:
```
<div class="ball"></div>
```
CSS代码:
```
.ball {
width: 50px;
height: 50px;
background-color: red;
border-radius: 50%;
transition: all 0.5s ease;
}
.ball:hover {
transform: scale(2);
background-color: black;
}
```
以上代码表示当鼠标移上去时,球的宽高变为原来的两倍,背景色过渡到黑色,动画时间为0.5秒,并且有缓动效果。当宽度改变时,球的过渡动画也会自动触发。
希望这个代码示例对你有所帮助!
相关问题
我需要一个使用js和HTML5制作一个图片在页面上滚动,鼠标移上去时放大停下
好的,这是一个比较常见的需求,以下是实现方法:
1. 在 HTML 中插入一个 div 标签,设置一个 id。
```html
<div id="scroll-container">
<img src="图片地址" alt="图片描述">
</div>
```
2. 使用 CSS 设置 div 的宽度和高度,并将图片设置为绝对定位。
```css
#scroll-container {
width: 500px;
height: 300px;
overflow: hidden;
position: relative;
}
#scroll-container img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: auto;
transition: transform 0.3s ease;
}
```
3. 使用 JavaScript 实现图片的滚动和放大。
```javascript
var scrollContainer = document.getElementById('scroll-container');
var img = scrollContainer.getElementsByTagName('img')[0];
var mouseOver = false;
function scrollImage() {
if (!mouseOver) {
var currentPos = parseInt(img.style.top);
var newPos = currentPos - 1;
if (newPos <= -img.height + scrollContainer.clientHeight) {
newPos = scrollContainer.clientHeight;
}
img.style.top = newPos + 'px';
}
requestAnimationFrame(scrollImage);
}
scrollImage();
scrollContainer.addEventListener('mouseover', function() {
mouseOver = true;
img.style.transform = 'scale(1.2)';
});
scrollContainer.addEventListener('mouseout', function() {
mouseOver = false;
img.style.transform = 'scale(1)';
});
```
这段代码中,`scrollImage` 函数实现了图片的滚动效果,`mouseOver` 变量用于记录鼠标是否移动到了图片上,`mouseover` 和 `mouseout` 事件分别用于在鼠标移上和移出时改变图片的大小。
vue 使用 TransitionGroup 写一个宽度 慢慢变长的动画
好的,下面是一个使用Vue的`TransitionGroup`实现宽度慢慢变长的动画的示例代码:
```html
<template>
<div class="wrapper">
<transition-group name="slide" tag="div" class="container">
<div v-for="(item, index) in items" :key="index" class="item" :style="{ width: item.width + 'px' }">
{{ item.text }}
</div>
</transition-group>
<button @click="addItem">添加</button>
</div>
</template>
<script>
export default {
name: 'WidthAnimation',
data() {
return {
items: [
{ text: 'Item 1', width: 0 },
{ text: 'Item 2', width: 0 },
{ text: 'Item 3', width: 0 },
],
};
},
methods: {
addItem() {
const newItem = { text: 'New Item', width: 0 };
this.items.push(newItem);
this.$nextTick(() => {
newItem.width = 200;
});
},
},
};
</script>
<style scoped>
.container {
display: flex;
justify-content: flex-start;
align-items: center;
margin-top: 20px;
}
.item {
margin-right: 20px;
background-color: #ddd;
height: 50px;
display: flex;
justify-content: center;
align-items: center;
transition: width 1s;
}
.slide-enter-active,
.slide-leave-active {
transition: none;
}
.slide-enter,
.slide-leave-to {
width: 0;
}
</style>
```
在这个示例中,我们使用了Vue的`TransitionGroup`组件来实现动态添加和删除元素的过渡效果。我们在容器中使用`v-for`指令来循环渲染元素,并为每个元素绑定一个宽度的样式。
当我们点击“添加”按钮时,会向数组中添加一个新的元素,并在下一次DOM更新后将其宽度设置为200px,从而触发宽度慢慢变长的过渡动画。
在CSS样式中,我们针对过渡动画添加了`.slide-enter-active`和`.slide-leave-active`两个类名,并将宽度的过渡时间设置为1s。同时,我们还使用了`.slide-enter`和`.slide-leave-to`两个类名来控制元素的宽度变化。
最后,我们将这个组件注册为全局组件,就可以在其他组件中使用了:
```js
import WidthAnimation from './WidthAnimation.vue';
app.component('WidthAnimation', WidthAnimation);
```
在其他组件中使用示例:
```html
<template>
<width-animation></width-animation>
</template>
```