穿墙效果及注释

2023-10-31 06:20
文章标签 效果 注释 穿墙

本文主要是介绍穿墙效果及注释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

穿墙效果附加注释,附加鼠标进入方向算法

<!doctype html>
<html><head><meta charset="UTF-8"><title>Title</title><style>* {margin: 0;padding: 0;list-style: none;}ul {overflow: hidden;width: 630px;margin: 100px auto;}ul li {float: left;position: relative;width: 200px;height: 200px;background: #ccc;margin: 5px;overflow: hidden;}ul li span {position: absolute;width: 100%;height: 100%;background: rgba(255, 0, 0, 0.3);left: -200px;top: 0;}</style><script>function getStyle(obj, sName) {// 获取元素对象的css属性值兼容ie和其他浏览器return (obj.currentStyle || getComputedStyle(obj, false))[sName];}function move(obj, json, options) {// obj 为元素对象、json为设定最后结果对象、options为设置对象// 给options设定默认值options = options || {};// 设定持续时间options.duration = options.duration || 700;// 设定运动方式options.easing = options.easing || 'ease-out';// 定义空对象var start = {};// 定义差值对象var dis = {};// 遍历设定设定最后结果对象for (var name in json) {// 将设定最后结果对象中的属性值与初始值取差值start[name] = parseFloat(getStyle(obj, name) );dis[name] = json[name] - start[name];}// 下方每30毫秒执行一次运动,这里获取运动总次数var count = Math.floor(options.duration / 30);// 设定运动初始次数var n = 0;// 清空间歇调用,如果以前定义过则清除动画次数
        clearInterval(obj.timer);// 用obj.timer来代替动画次数obj.timer = setInterval(function() {n++;for (var name in json) {switch (options.easing) {case 'linear':var cur = start[name] + dis[name] * n / count;break;case 'ease-in':var a = n / count;var cur = start[name] + dis[name] * Math.pow(a, 3);break;// 次数默认使用ease-outcase 'ease-out':var a = 1 - n / count;// cur为每次运动后的元素的落脚位置var cur = start[name] + dis[name] * (1 - Math.pow(a, 3));break;}if (name == 'opacity') {obj.style.opacity = cur;obj.style.filter = 'alpha(opacity:' + cur * 100 + ')';} else {obj.style[name] = cur + 'px';}}// 如果运动完成,则清除运动(obj.timer)if (n == count) {// 清除动画次数
                clearInterval(obj.timer);// 回调函数options.complete && options.complete();}}, 30);}function a2d(n) {// n 为弧度 ;弧度转化为角度return n * 180 / Math.PI;}function hoverDir(ev, obj) {// 领边长度var a = ev.clientX - obj.offsetLeft - obj.offsetWidth / 2;// 对边长度var b = obj.offsetTop + obj.offsetHeight / 2 - ev.clientY;// 通过角度来获得鼠标进入的方向;0为左侧、 1为下 、2为右、 3为上// Math.atan2(b, a)为获取弧度公式// a2d(n)为获取角度公式return Math.round((a2d(Math.atan2(b, a)) + 180) / 90) % 4;}function through(obj) {var oS = obj.children[0]; //这个是li里面的span// 鼠标进入的时候obj.onmouseenter = function(ev) {// 如果不知道ev是啥  就打印出来看看
            console.log(ev)// 兼容ie浏览器var oEvent = ev || event;// obj为li,将oEvent和 li 作为参数,dir为返回值代表着鼠标的进入方向var dir = hoverDir(oEvent, obj);switch (dir) {case 0://左,oS为li中的 spanoS.style.left = '-200px';oS.style.top = 0;break;case 1://oS.style.left = 0;oS.style.top = '200px';break;case 2://oS.style.left = '200px';oS.style.top = 0;break;case 3://oS.style.left = 0;oS.style.top = '-200px';break;}//oS是li里面的span,设置运动  // move(obj, json, options) obj = oS 、 json = { left: 0, top: 0 }、options取默认值,并且没有回调函数move(oS, { left: 0, top: 0 });};// 鼠标离开时obj.onmouseleave = function(ev) {var oEvent = ev || event;var dir = hoverDir(oEvent, obj);switch (dir) {case 0:// move(obj, json, options) obj = oS 、 json = { left: -200, top: 0 }、options取默认值,并且没有回调函数move(oS, { left: -200, top: 0 });break;case 1:move(oS, { left: 0, top: 200 });break;case 2:move(oS, { left: 200, top: 0 });break;case 3:move(oS, { left: 0, top: -200 });break;}};}window.onload = function() {var aLi = document.getElementsByTagName('li');for (var i = 0; i < aLi.length; i++) {through(aLi[i]);}};</script>
</head><body><ul><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li></ul>
</body></html>

 

转载于:https://www.cnblogs.com/hss-blog/p/9040431.html

这篇关于穿墙效果及注释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/313416

相关文章

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti