ceil 向上取整

floor 向下取整

round 四舍五入

缓动动画

  1. 动画原理 = 盒子位置 + 步长
  2. 清除定时器
  3. 步长越来越小
  4. 盒子位置 = 盒子本身位置 + (目标位置-本身位置)/n(最好为10)
  5. 最后10像素容易 容易出现问题
    1. 所以要向上取整
    2. 400-396 = 4  4/10 = 0.4   四舍五入 = 0
    3. 400-396 = 4  4/10 = 0.4   四舍五入 = 0
  6. 要用定时器 先清除定时器

  7.  offsetLest取值为四舍五入

  8.  差值大于0的时候向上取整

  9.  差值小于0的时候向下取整

筋斗云

  1. 导航栏,鼠标移动 筋斗云跟着移动,移开筋斗云回去
  2. 点击后筋斗云固定
  3. 鼠标移开,筋斗云跟着移动, 点击后固定
  4. 定义一个全局变量,点击事件记录索引自豪
  5. 小数最好不要参与运算
  6. window.onload =function(){}

  

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
* {
margin: 0;
padding: 0;
}
body {
background: rgba(0, 0, 0, 0.8);
}
.box {
width: 800px;
height: 42px;
background: #fff url("images/wifi.png") right center no-repeat;
margin: 200px auto;
border-radius: 8px;
position: relative;
}
ul {
list-style: none;
position: relative;
}
li {
float: left;
width: 83px;
height: 42px;
text-align: center;
font: 500 16px/42px "simsun";
cursor: pointer;
}
span {
position: absolute;
left: 0;
top: 0;
width: 83px;
height: 42px;
background: url("images/cloud.gif") no-repeat;
}
</style>
<script>
window.onload = function () {
//需求1:鼠标放到哪个li上面,span对应移动到该li上。移开后,回到原位置。
//需求2:鼠标点击那个li记录该li标签,移开的时候span回到该记录的li标签上。
//步骤:
//1.老三步
//2.计数器
//需求1:鼠标放到哪个li上面,span对应移动到该li上。移开后,回到原位置。
//1.老三步
var liArr = document.getElementsByTagName("li");
var liWidth = liArr[0].offsetWidth;
var span = document.getElementsByTagName("span")[0];
//计数器
var count = 0; //for循环绑定事件
for(var i=0;i<liArr.length;i++){
//自定义属性,然后绑定index属性为索引值
liArr[i].index = i;
//鼠标进入事件
liArr[i].onmouseover = function () {
//让span运动到该li的索引值位置
//图片运动需要封装的方法
animate(span,this.index*liWidth);
}
//鼠标移开
liArr[i].onmouseout = function () {
//让span运动到该li的索引值位置
//图片运动需要封装的方法
animate(span,count*liWidth);
}
//点击事件,记录功能
liArr[i].onclick = function () {
//需要一个计数器,每次点击以后把所以只记录下来
//因为onmouseout事件要用到这个计数器,所以应该是一个全局变量
count = this.index;
animate(span,count*liWidth);
} } //缓动动画封装
function animate(ele,target) {
clearInterval(ele.timer);
ele.timer = setInterval(function () {
var step = (target-ele.offsetLeft)/10;
step = step>0?Math.ceil(step):Math.floor(step);
ele.style.left = ele.offsetLeft + step + "px";
console.log(1);
if(Math.abs(target-ele.offsetLeft)<Math.abs(step)){
ele.style.left = target + "px";
clearInterval(ele.timer);
}
},18);
}
}
</script>
</head>
<body>
<div class="box">
<span></span>
<ul>
<li>首页新闻</li>
<li>活动策划</li>
<li>师资力量</li>
<li>企业文化</li>
<li>招聘信息</li>
<li>公司简介</li>
<li>上海校区</li>
<li>广州校区</li>
</ul>
</div>
</body>
</html>

导航焦点筋斗云特效

scroll

  scrollWidth 宽度:获取宽高/不包括border和margin/包括padding

  scrollHeight 高度: 若内容没有溢出是盒子本身的高度/溢出是超出内容的高度总高度/

            IE7(包括IE7)以下是内容的高度/包括padding不包括border margin

  scrollLeft :网页被卷去的左侧,调用者是 document.body

  scrollTop:网页被卷去的头部 /存在兼容性问题

  onscroll 滚动滚轮 :window.onscroll    只能使用一次 以最后一个为准

  DTD: 旧版本的浏览器遵循一些新的规则

      未声明DTD,谷歌只识别DTD (IE9+认识他) :document.body.scrollTop

      已经声明DTD,IE6/7/8 可以识别 ,IE9在任何时候都识别)

          document.documentElement.scrollTop

      火狐/谷歌/IE9+以上支持的(不管DTD)

          window.pageYOffset

    window.pageYOffset

    window.body.scrollTop

    window.document.documentElement.scrollTop

    document.title 访问文档标题

    document.head   访问文档头部

    document.body    访问文档主题

    document.document.Element    获取文档的HTML标签

    body在动还是html标签在动

 json:

    有一定属性和属性值的对象/用 for...in 遍历

    

for (var key in json){

console.log (key)//属性

console.log(json[key]);//属性值

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin:0;
padding:0;
}
img {
vertical-align:top;
}
.main {
margin:0 auto;
width: 1000px;
margin-top: 10px;
}
#Q-nav1 {
overflow: hidden;
}
.fixed {
position: fixed;
top:0;
left: 0;
}
/* 两边fixed的广告*/
.img1 {
position: absolute;
top: 80px;
left: 10px;
}
.img2 {
position: absolute;
top: 80px;
right: 10px;
}
/*回到顶部的按钮*/
#topId {
position:fixed;
bottom:100px;
right: 50px;
cursor: pointer;
display: none;
border:1px solid #000000;
} </style>
<script src="my.js"></script>
<script>
window.onload = function () {
var topDiv = document.getElementById("top");
var height = topDiv.offsetHeight;
var middle = document.getElementById("Q-nav1");
var main = document.getElementById("main");
// 两边fixed的广告
var imgArr1 = document.getElementsByClassName("img1")[0];
var imgArr2 = document.getElementsByClassName("img2")[0];
// 小火煎
var img = document.getElementById("topId"); window.onscroll = function () {
if (scroll().top > height){
middle.className += " fixed";
main.style.paddingTop = middle.offsetHeight+"px";
}else {
middle.className = "";
main.style.paddingTop = 0 ;
}
// 两边fixed的广告
var val =scroll().top ;
animateFixed(imgArr1,val+80);
animateFixed(imgArr2,val+80);
// 回到顶部/当被卷去的头部超过1000则显示回到顶部小火箭
// window.sc rollTo(x,y);浏览器显示区域跳转到指定的坐标
if (scroll().top > 1000){
img.style.display = "block";
}else {
img.style.display = "none";
}
leader = scroll().top;
}
var timer =null ;
var target = 0;
var leader = 0;
img.onclick = function () {
clearInterval(timer);
timer = setInterval(function () {
var step = (target -leader)/10;
step = step>0?Math.ceil(step):Math.floor(step);
leader = leader +step;
window.scrollTo(0,leader);
if (leader == 0 ){
clearInterval(timer);
}
},25)
}
} </script> </head>
<body> <div class="top" id="top">
<img src="data:images/top.png" alt="">
</div>
<div id="Q-nav1">
<img src="data:images/nav.png" alt="">
</div>
<div class="main" id="main">
<img src="data:images/main.png" alt=""/>
</div>
两侧的广告
<img class="img1" src="data:images/aside.jpg"/>
<img class="img2" src="data:images/aside.jpg"/>
<!--点击滑动到顶部-->
<img id="topId" src="data:images/Top2.jpg" /> </body>
</html>

顶部悬浮导航、两侧跟随广告、返回顶部小火煎

/**
* Created by mingming on 2017/4/7.
*/
/**
*
* @returns {*}
* 获取屏幕滚动事件属性
*/ function scroll() {
if (window.pageYOffset !== undefined) {// ie9+ 高版本浏览器
// 因为 window.pageYOffset 默认是 0 所以这里需要判断
return {
left:window.pageXOffset,
top:window.pageYOffset
}
}
else if (document.compatMode === "CSS1Compat") { // 标准浏览器
return{
left:document.documentElement.scrollLeft,
top:document.documentElement.scrollTop
}
}
return { // 未声明 DTD
left:document.body.scrollLeft,
top:document.body.scrollTop
}
}
/**
* 侧边栏fixed的广告
*/
function animateFixed(ele,target) {
clearInterval(ele.timer);
ele.timer = setInterval(function () {
var step = (target-ele.offsetTop)/10 ;
step = step>0? Math.ceil(step):Math.floor(step);
ele.style.top = ele.offsetTop + step +"px";
if(Math.abs(target - ele.offsetTop)<=Math.abs(step)){
ele.style.top = target +"px";
clearInterval(ele.timer);
}
},25)
} /**
* 缓动画封装
*
*/ function animate(ele,target) {
clearInterval(ele.timer);
ele.timer = setInterval(function () {
var step = (target - ele.offsetLeft)/10 ;
step = step>0?Math.ceil(step):Math.floor(step);
ele.style.left = ele.offsetLeft + step+"px";
if (Math.abs(target-ele.offsetLeft)<Math.abs(step)){
ele.style.left = target+"px";
clearInterval(ele.timer);
}
},18)
} /**
* Created by Lenovo on 2016/9/2.
*/
/**
* 通过传递不同的参数获取不同的元素
* @param str
* @returns {*}
*/
function $(str){
var str1 = str.charAt(0);
if(str1==="#"){
return document.getElementById(str.slice(1));
}else if(str1 === "."){
return document.getElementsByClassName(str.slice(1));
}else{
return document.getElementsByTagName(str);
}
} /**
* 功能:给定元素查找他的第一个元素子节点,并返回
* @param ele
* @returns {Element|*|Node}
*/
function getFirstNode(ele){
var node = ele.firstElementChild || ele.firstChild;
return node;
} /**
* 功能:给定元素查找他的最后一个元素子节点,并返回
* @param ele
* @returns {Element|*|Node}
*/
function getLastNode(ele){
return ele.lastElementChild || ele.lastChild;
} /**
* 功能:给定元素查找他的下一个元素兄弟节点,并返回
* @param ele
* @returns {Element|*|Node}
*/
function getNextNode(ele){
return ele.nextElementSibling || ele.nextSibling;
} /**
* 功能:给定元素查找他的上一个兄弟元素节点,并返回
* @param ele
* @returns {Element|*|Node}
*/
function getPrevNode(ele){
return ele.previousElementSibling || ele.previousSibling;
} /**
* 功能:给定元素和索引值查找指定索引值的兄弟元素节点,并返回
* @param ele 元素节点
* @param index 索引值
* @returns {*|HTMLElement}
*/
function getEleOfIndex(ele,index){
return ele.parentNode.children[index];
} /**
* 功能:给定元素查找他的所有兄弟元素,并返回数组
* @param ele
* @returns {Array}
*/
function getAllSiblings(ele){
//定义一个新数组,装所有的兄弟元素,将来返回
var newArr = [];
var arr = ele.parentNode.children;
for(var i=0;i<arr.length;i++){
//判断,如果不是传递过来的元素本身,那么添加到新数组中。
if(arr[i]!==ele){
newArr.push(arr[i]);
}
}
return newArr;
}

封装

JS-特效 ~ 02. 屏幕滚动事件、 DTD、scroll、顶部悬浮导航、两侧跟随广告、返回顶部小火煎的更多相关文章

  1. js给页面添加滚动事件并判断滚动方向

    <script> var scrollFunc = function (e) { var direct = 0; e = e || window.event; if (e.wheelDel ...

  2. 纯JS阻止浏览器默认滚动事件,实现自定义滚动方法

    首先该方法兼容IE7+以上浏览器,可以实现页面上下滚动,而且也可以实现页面左右滚动,每次滚动的距离为屏幕的大小,滚动为加速滚动 javaScript代码如下: //滚动实现方法,使用鼠标滚轮每次滚动浏 ...

  3. JS特效——图片水平滚动

    具体源码如下: <!doctype html> <html lang="en"> <head> <meta http-equiv=&quo ...

  4. JS鼠标滚动事件

    -----------------------------//鼠标滚动事件以下是JS临听鼠标滚动事件 并且还考虑到了各浏览器的兼容----------------------------------- ...

  5. 19 01 15 js 尺寸相关 滚动事件

    尺寸相关.滚动事件 1.获取和设置元素的尺寸 width().height() 获取元素width和height innerWidth().innerHeight() 包括padding的width和 ...

  6. taro 滚动事件

    taro 滚动事件 taro scroll bug ScrollView https://nervjs.github.io/taro/docs/components/viewContainer/scr ...

  7. 原生js返回顶部(匀速、由快到慢)

    在项目中我们经常有需求要求页面滚动到一定位置时出现返回顶部按钮,点击即返回顶部. 方法一: 锚点,这是最简单的.(a标签的href属性等于一直要到达位置元素的id值) 方法二: js直接给页面根节点设 ...

  8. 带左右箭头切换的自动滚动图片JS特效

    效果图 按钮 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  9. JS事件监听手机屏幕触摸事件 Touch

    JS移动客户端--触屏滑动事件 移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的t ...

随机推荐

  1. Docker笔记(七):常用服务安装——Nginx、MySql、Redis

    开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的安装方法,一般都相对比较繁琐 —— 要经过下载软件或源码包,编译安装,配置,启动等步骤,使用 Docker ...

  2. Java学习多线程第二天

    内容介绍 线程安全 线程同步 死锁 Lock锁 等待唤醒机制 1    多线程 1.1     线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果 ...

  3. Spark 系列(七)—— 基于 ZooKeeper 搭建 Spark 高可用集群

    一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...

  4. spring-boot 示例大全

    spring-boot-demo Spring Boot 学习示例,将持续更新... 本项目基于spring boot 最新版本(2.1.7)实现 什么是spring-boot Spring Boot ...

  5. (17)ASP.NET Core EF基于数据模型创建数据库

    1.简介 使用Entity Framework Core构建执行基本数据访问的ASP.NET Core MVC应用程序.使用迁移(Migrations)基于数据模型创建数据库,你可以在Windows上 ...

  6. notepad 写html乱码,已解决

    写一些简单基础的html文件时,突然发现新建的demo2,在浏览器打开乱码,而昨天的demo1打开没乱码,真奇怪,开始排查原因. 1.检查代码,,设了charset=UTF-8,看不出毛病. 2.索性 ...

  7. 多渠道推广场景下,如何实现 App 用户增长的精准归因?

    为了实现用户的快速增长,以推广 App 为目标的线上广告投放是很多平台获取新用户的重要方式.随道移动互联网的发展,现在 App 推广的渠道越来越丰富,除了 WAP 站点.第三方 App 之外,HTML ...

  8. Linux 终端命令格式

    Linux 终端命令格式 一.目标 了解终端命令格式 知道如何查阅终端命令帮助信息 二. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相 ...

  9. Linux内核DTB文件启动的几种方式

      版权:  凌云物网智科实验室< www.iot-yun.com > 声明:  本文档由凌云物网智科实验室郭工编著! 作者:  郭文学< QQ: 281143292  guowen ...

  10. HTML的发展及认识

    首先HTML全称是Hypertext Markup Language,它是一门超文本标记语言: HTML已经有了HTML2.0.HTML3.2.HTML 4.0. HTML4.01. HTML5几个阶 ...