目录

  • 1 JavaScript快速入门
    • 1.1 如何插入javascrip代码
    • 1.2 引用javascritp外部文件
    • 1.3 JavaScript在页面中位置
    • 1.4 JavaScript语句和符号
    • 1.5 JavaScript注释
    • 1.6 案例1-1 script标签在html中书写位置
    • 1.7 案例1-2  JavaScript引入方式
    • 1.8 JavaScript变量
    • 1.9 JavaScript判断语句
    • 1.10 JavaScript函数
    • 1.11 案例1-4 比较两个数大小
    • 1.12 案例1-8 改变网页皮肤颜色
    • 1.13 案例1-9 验证用户名和密码
  • 2 基本语法
    • 2.1 变量
      • 2.1.1 标识符
      • 2.1.2 保留关键字
      • 2.1.3 变量的使用
      • 2.1.4 变量的赋值
    • 2.2 变量的数据类型
      • 2.2.1 数据类型分类
      • 2.2.2 基本数据类型
      • 2.2.3 数据类型检测
      • 2.2.4 数据类型检测总结
      • 2.2.5 数据类型转换
      • 2.2.6 数据类型转换(程序1)
      • 2.2.7 数据类型转换(程序2)
      • 2.2.8 数据类型转换(程序3)
      • 2.2.9 数据类型转换(程序4)
      • 2.2.10 数据类型转换(程序5)
      • 2.2.11 数据类型转换(程序6)
    • 2.3 表达式
    • 2.4 运算符
      • 2.4.1 算数运算符
      • 2.4.2 字符串运算符
      • 2.4.3 赋值运算符
      • 2.4.4 比较运算符
      • 2.4.5 逻辑运算符
      • 2.4.6 三元运算符
      • 2.4.7 位运算符
      • 2.4.8 运算符优先级
    • 2.5 流程控制
      • 2.5.1 选择结构
      • 2.5.2 if单分支语句
      • 2.5.3 if...else双分支语句
      • 2.5.4 if...else双分支举例
      • 2.5.5 if...else多路分支语句
      • 2.5.6 if...else多路分支举例
      • 2.5.7 switch...case多路分支
      • 2.5.8 while循环语句
      • 2.5.9 do...while语句
      • 2.5.10 for语句
      • 2.5.11 九九乘法表
      • 2.5.12 判断素数
      • 2.5.13 判断红白黑球个数
  • 3 数组
    • 3.1 初始数组
    • 3.2 创建数组
    • 3.3 数组的基本操作
    • 3.4 常见二维数组操作
    • 3.5 数组排序
      • 3.5.1 冒泡排序
      • 3.5.2 选择排序
      • 3.5.3 插入排序
    • 3.6 常见数组方法
    • 3.7 案例 猴子选大王
    • 3.8 案例 省份城市的三级联动
  • 4 函数
    • 4.1 函数的定义与调用
    • 4.2 变量的作用域
    • 4.3 匿名函数
    • 4.4 嵌套与递归
    • 4.5 闭包函数
  • 5 对象
    • 5.1 面向对象概述
    • 5.2 自定义对象
    • 5.3 构造函数
    • 5.4 内置对象
      • 5.4.1 String对象
      • 5.4.2 Number对象
      • 5.4.3 Math对象
      • 5.4.4 Date对象
  • 6 BOM
    • 6.1 什么是BOM
    • 6.2 window对象
      • 6.2.1 弹出窗口
      • 6.2.2 窗口打开关闭
      • 6.2.3 定时器
      • 6.2.4 限时秒杀
    • 6.3 location对象
    • 6.4 history对象
    • 6.5 navigator对象
    • 6.6 screen对象
    • 6.7 动手实践
      • 6.7.1 限时秒杀
      • 6.7.2 定时跳转
      • 6.7.3 红绿灯倒计时
      • 6.7.4 显示时间与日期
  • 7 DOM
    • 7.1 DOM对象简介
    • 7.2 HTML元素操作
    • 7.3 DOM节点操作
    • 7.4 轮播特效
    • 7.5 购物车实现方法1
      • 7.5.1 购物车结构
      • 7.5.2 购物车样式
      • 7.5.3 购物车业务逻辑
    • 7.6 购物车实现方法2
      • 7.6.1 结构页面
      • 7.6.2 样式
      • 7.6.3 页面逻辑
    • 7.7 京东
  • 8 事件
    • 8.1 事件处理
      • 8.1.1 代码
      • 8.1.2 举例
    • 8.2 事件对象
      • 8.2.1 冒泡处理
      • 8.2.2 target与currentTarget
      • 8.2.3 禁止粘贴、右键、复制、剪切
    • 8.3 事件操作
      • 8.3.1 页面事件
      • 8.3.2 鼠标事件
      • 8.3.3 键盘事件
      • 8.3.4 表单事件
    • 8.4 图片无缝滚动
    • 8.5 看了又看
    • 8.6 放大镜
    • 8.7 商品详情页放大镜效果
      • 8.7.1 页面结构
      • 8.7.2 页面样式
      • 8.7.3 页面逻辑
    • 8.8 飘动的广告
    • 8.9 猜拳游戏
    • 8.10 瀑布流
    • 8.11 手风琴效果
  • 9 正则表达式
    • 9.1 认识正则表达式
    • 9.2 字符类别与集合
    • 9.3 字符限定与分组
    • 9.4 与正则相关的方法
    • 9.5 页面注册
      • 9.5.1 注册页面结构
      • 9.5.2 注册页面样式
      • 9.5.3 注册页面逻辑
    • 9.6 身份证验证
    • 9.7 成员注册
  • 10 初识jQuery
    • 10.1 jQuery课程简介
    • 10.2 jQuery的引入.html
    • 10.3 jQuery实现第一页面
    • 10.4 jQuery对象与DOM对象
    • 10.5 jQuery对象转化成DOM对象
    • 10.6 DOM对象转化成jQuery对象
  • 11 jQuery选择器
    • 11.1 jQuery选择器之ID选择器
    • 11.2 jQuery选择器之类选择器
    • 11.3 jQuery选择器之标签选择器
    • 11.4 jQuery选择器之全局选择器
    • 11.5 jQuery选择器之层级选择器
    • 11.6 jQuery选择器之组合选择器
    • 11.7 jQuery选择器之基本过滤选择器
    • 11.8 jQuery选择器之内容过滤选择器
    • 11.9 jQuery选择器之属性过滤选择器
    • 11.10 ​jQury选择器之可见选择器
    • 11.11 jQuery选择器之表单元素选择器
    • 11.12 jQuery选择器之表单对象属性选择器
    • 11.13 jQuery选择器之子元素过滤选择器
    • 11.14 jQuery子元素过滤选择器补充
    • 11.15 jQuery选择器之特殊选择器$(this)
    • 11.16 视频
  • 12 jQuery属性与样式
    • 12.1 jQuery属性与样式之.arrt()与removeAttr()
    • 12.2 jQuery属性与样式之.html()与.text()
    • 12.3 jQuery属性与样式之.val()
    • 12.4 jQuery属性与样式之样式的操作
    • 12.5 jQuery属性与样式之.css()
    • 12.6 jQuery尺寸方法
    • 12.7 jQuery的offset()方法
    • 12.8 jQuery之checkbox各种选中操作
  • 13 jQueryDOM操作
    • 13.1 jQueryDOM的创建
    • 13.2 jQuery元素内插入节点的方法
    • 13.3 jQuery元素外插入节点的方法
    • 13.4 jQuery节点的删除方法
    • 13.5 jQuery节点的复制方法
    • 13.6 jQuery节点的替换方法
    • 13.7 jQuery节点的包裹方法6
    • 13.8 修改文档结构视频
  • 14 jQuery遍历
    • 14.1 jQuery遍历祖先节点的方法
    • 14.2 jQuery遍历后代节点的方法
    • 14.3 jQuery遍历同胞节点的方法
    • 14.4 jQuery遍历之基本过滤方法
    • 14.5 jQuery遍历之高级过滤方法
    • 14.6 jQuery实现新闻滚动
    • 14.7 jQuery实现选项卡
  • 15 jQuery效果
    • 15.1 jQuery效果-隐藏与显示
    • 15.2 jQuery效果-逐个显示与隐藏
    • 15.3 jQuery效果-淡入淡出
    • 15.4 jQuery效果-滑动
    • 15.5 jQuery效果-动画
    • 15.6 jQuery效果-手动轮播
    • 15.7 jQuery效果-自动轮播
    • 15.8 动画效果视频
  • 16 jQuery事件
    • 16.1 jQuery鼠标事件之click与dblclick事件
    • 16.2 jQuery鼠标事件之mousedown与mouseup事件
    • 16.3 jQuery鼠标事件之mouseenter与mouseleave事件
    • 16.4 jQuery鼠标事件之mouseover与mouseout事件
    • 16.5 jQuery鼠标事件之hover
    • 16.6 jQuery鼠标事件之mousemove事件
    • 16.7 jQuery鼠标事件之focusin与focuout事件
    • 16.8 jQuery表单事件之focus与blur事件
    • 16.9 jQuery表单事件之select事件
    • 16.10 jQuery表单事件之submit事件
    • 16.11 jQuery表单事件之change事件
    • 16.12 jQuery事件举例-轮播
    • 16.13 jQuery事件的绑定
    • 16.14 jQuery事件委托
    • 16.15 jQuery事件冒泡的处理
    • 16.16 jQuery键盘事件之keyup、keydown、keypress事件
    • 16.17 通过键盘事件控制元素移动
    • 16.18 通过jQuery键盘事件进行表单元素验证
    • 16.19 事件处理视频
  • 17 jQuery案例
    • 17.1 jQuery案例一无缝滚动
    • 17.2 jQuery案例二放大镜
    • 17.3 jQuery案例三瀑布流
    • 17.4 jQuery案例四简单的树形菜单
    • 17.5 jQuery案例五居中放大
    • 17.6 jQuery案例六右侧在线客服
    • 17.7 jQuery案例七五星评分
    • 17.8 jQuery案例八抽奖
    • 17.9 jQuery案例九购物车
    • 17.10 jQuery案例十手风琴
    • 17.11 jQuery案例十一轮播
    • 17.12 jQuery案例十二进度条
    • 17.13 jQuery案例十三普通图表
    • 17.14 jQuery案例十三数组图表
    • 17.15 jQuery案例十三多数组图表
    • 17.16 jQuery案例十四轮播与手风琴结合
    • 17.17 jQuery案例十五滚动楼层效果
    • 17.18 jQuery案例十六右侧悬浮楼层滚动
    • 17.19 jQuery仿天猫页面楼层跳转
  • 18 jQueryMoblie基础
    • 18.1 jqueryMoblie HelloWorld
    • 18.2 jQueryMoblie按钮
    • 18.3 jQueryMoblie列表
  • 19 jQuerymobile案例
    • 19.1 作品展示
    • 19.2 可折叠列表
    • 19.3 可折叠集合
    • 19.4 多级折叠
    • 19.5 搜索过滤
  • 20 实训
    • 20.1 JavaScript程序设计实训内容及要求
    • 20.2 实训报告
jQuery案例十六右侧悬浮楼层滚动

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>17.18jQuery右侧悬浮楼层滚动</title>


<script type="text/javascript" src="js/jquery.min.js"></script>


<style>

html {

  box-sizing: border-box;

}

*,

*:after,

*:before {

  box-sizing: inherit;

}

html,

body {

  height: 100%;

}

body {

  font-family: "Roboto", Helvetica, Arial, sans-serif;

  margin: 0;

}

h1 {

  margin: 0;

  padding: 0;

}

section {

  display: -webkit-box;

  display: -ms-flexbox;

  display: flex;

  -webkit-box-pack: center;

      -ms-flex-pack: center;

          justify-content: center;

  -webkit-box-align: center;

      -ms-flex-align: center;

          align-items: center;

  color: rgba(0,0,0,0.5);

  font-size: 2rem;

  min-height: 100%;

  height: 100vh;

}

.Quick-navigation {

  position: fixed;

  z-index: 1;

  margin: 0;

  top: 50%;

  right: 0;

  -webkit-transform: translateY(-50%);

          transform: translateY(-50%);

}

.Quick-navigation-item {

  color: rgba(0,0,0,0.4);

  text-decoration: none;

  font-size: 1.3em;

  -webkit-transition: color 0.3s;

  transition: color 0.3s;

  padding: 0.5em;

  display: block;

}

.Quick-navigation-item:hover,

.Quick-navigation-item.current {

  color: #fff;

}

.Scroll-progress-indicator {

  will-change: opacity, transform;

  -webkit-transition: all 0.5s;

  transition: all 0.5s;

  left: -10px;

  border-radius: 2px;

  position: absolute;

  top: 50%;

  opacity: 0;

  padding: 2em;

  -webkit-transform: translateX(200%) translateY(-50%);

          transform: translateX(200%) translateY(-50%);

  background-color: rgba(0,0,0,0.1);

}

.Scroll-progress-indicator.visible {

  -webkit-transform: translateX(-100%) translateY(-50%);

          transform: translateX(-100%) translateY(-50%);

  opacity: 1;

}

#A {

  background-color: #dc143c;

}

#B {

  background-color: #eb2049;

  height: 600px;

}

#C {

  background-color: #ed395d;

}

#D {

  background-color: #ef5271;

  height: 200px;

}

#E {

  background-color: #f26a85;

}

.Scroll-to-top {

  position: fixed;

  right: 20px;

  bottom: 0;

  background-color: rgba(0,0,0,0.2);

  border: none;

  color: rgba(255,255,255,0.5);

  font-size: 1.5rem;

  padding: 0.5em;

  cursor: pointer;

  opacity: 0;

  -webkit-transform: translateY(100%);

          transform: translateY(100%);

  -webkit-transition: all 0.3s;

  transition: all 0.3s;

  outline: none;

}

.Scroll-to-top.visible {

  opacity: 1;

  -webkit-transform: translateY(0);

          transform: translateY(0);

}

.Scroll-to-top:hover {

  color: rgba(255,255,255,0.9);

}

</style>



</head>

<body>


<nav class="Quick-navigation">

  <a href="#A" class="Quick-navigation-item">A</a>

  <a href="#B" class="Quick-navigation-item">B</a>

  <a href="#C" class="Quick-navigation-item">C</a>

  <a href="#D" class="Quick-navigation-item">D</a>

  <a href="#E" class="Quick-navigation-item">E</a>

  <div class="Scroll-progress-indicator"></div>

</nav>


<section id="A" class="js-scroll-step">

  <h1>A</h1>

</section>


<section id="B"  class="js-scroll-step">

  <h1>B</h1>

</section>


<section id="C" class="js-scroll-step">

  <h1>C</h1>

</section>


<section id="D" class="js-scroll-step">

  <h1>D</h1>

</section>


<section id="E" class="js-scroll-step">

  <h1>E</h1>

</section>


<button class="Scroll-to-top">Scroll To Top</button>


<script>

(function () {


    function throttle(fn, delay, scope) {

        // Default delay

        delay = delay || 250;

        var last, defer;

        return function () {

            var context = scope || this,

                now = +new Date(),

                args = arguments;

            if (last && now < last + delay) {

                clearTimeout(defer);

                defer = setTimeout(function () {

                    last = now;

                    fn.apply(context, args);

                }, delay);

            } else {

                last = now;

                fn.apply(context, args);

            }

        }

    }


    function extend(destination, source) {

        for (var k in source) {

            if (source.hasOwnProperty(k)) {

                destination[k] = source[k];

            }

        }

        return destination;

    }

  


    var ScrollManager = (function () {


        var defaults = {


                steps: null,

                navigationContainer: null,

                links: null,

                scrollToTopBtn: null,


                navigationElementClass: '.Quick-navigation',

                currentStepClass: 'current',

                smoothScrollEnabled: true,

                stepsCheckEnabled: true,


            

                onScroll: null,


                onStepChange: function (step) {

                    var self = this;

                    var relativeLink = [].filter.call(options.links, function (link) {

                        link.classList.remove(self.currentStepClass);

                        return link.hash === '#' + step.id;

                    });

                    relativeLink[0].classList.add(self.currentStepClass);

                },


                smoothScrollAnimation: function (target) {

                    $('html, body').animate({

                        scrollTop: target

                    }, 'slow');

                }

            },


            options = {};


        // Privates

        var _animation = null,

            currentStep = null,

            throttledGetScrollPosition = null;


        return {


            scrollPosition: 0,


            init: function (opts) {


                options = extend(defaults, opts);


                if (options.steps === null) {

                    console.warn('Smooth scrolling require some sections or steps to scroll to :)');

                    return false;

                }


                // Allow to customize the animation engine ( jQuery / GSAP / velocity / ... )

                _animation = function (target) {

                    target = typeof target === 'number' ? target : $(target).offset().top;

                    return options.smoothScrollAnimation(target);

                };



                if (options.smoothScrollEnabled)  this.smoothScroll();


           

                if (options.scrollToTopBtn) {

                    options.scrollToTopBtn.addEventListener('click', function () {

                        options.smoothScrollAnimation(0);

                    });

                }


 

                throttledGetScrollPosition = throttle(this.getScrollPosition).bind(this);

                window.addEventListener('scroll', throttledGetScrollPosition);

                window.addEventListener('resize', throttledGetScrollPosition);


                this.getScrollPosition();

            },


            getScrollPosition: function () {

                this.scrollPosition = window.pageYOffset || window.scrollY;

                if (options.stepsCheckEnabled) this.checkActiveStep();

                if (typeof  options.onScroll === 'function') options.onScroll(this.scrollPosition);

            },


            scrollPercentage: function () {

                var body = document.body,

                    html = document.documentElement,

                    documentHeight = Math.max(body.scrollHeight, body.offsetHeight,

                        html.clientHeight, html.scrollHeight, html.offsetHeight);


                var percentage = Math.round(this.scrollPosition / (documentHeight - window.innerHeight) * 100);

                if (percentage < 0)  percentage = 0;

                if (percentage > 100)  percentage = 100;

                return percentage;

            },


            doSmoothScroll: function (e) {

                if (e.target.nodeName === 'A') {

                    e.preventDefault();

                    if (location.pathname.replace(/^\//, '') === e.target.pathname.replace(/^\//, '') && location.hostname === e.target.hostname) {

                        var targetStep = document.querySelector(e.target.hash);

                        targetStep ? _animation(targetStep) : console.warn('Hi! You should give an animation callback function to the Scroller module! :)');

                    }

                }

            },


            smoothScroll: function () {

                if (options.navigationContainer !== null) options.navigationContainer.addEventListener('click', this.doSmoothScroll);

            },


            checkActiveStep: function () {

                var scrollPosition = this.scrollPosition;


                [].forEach.call(options.steps, function (step) {

                    var bBox = step.getBoundingClientRect(),

                        position = step.offsetTop,

                        height = position + bBox.height;


                    if (scrollPosition >= position && scrollPosition < height && currentStep !== step) {

                        currentStep = step;

                        step.classList.add(self.currentStepClass);

                        if (typeof options.onStepChange === 'function') options.onStepChange(step);

                    }

                    step.classList.remove(options.currentStepClass);

                });

            },


            destroy: function () {

                window.removeEventListener('scroll', throttledGetScrollPosition);

                window.removeEventListener('resize', throttledGetScrollPosition);

                options.navigationContainer.removeEventListener('click', this.doSmoothScroll);

            }

        }

    })();

   


    var scrollToTopBtn = document.querySelector('.Scroll-to-top'),

        steps = document.querySelectorAll('.js-scroll-step'),

        navigationContainer = document.querySelector('.Quick-navigation'),

        links = navigationContainer.querySelectorAll('a'),

        progressIndicator = document.querySelector('.Scroll-progress-indicator');


    ScrollManager.init({

        steps: steps,

        scrollToTopBtn: scrollToTopBtn,

        navigationContainer: navigationContainer,

        links: links,

      

       

        onScroll: function () {

            var percentage = ScrollManager.scrollPercentage();

            percentage >= 90 ? scrollToTopBtn.classList.add('visible') : scrollToTopBtn.classList.remove('visible');


            if (percentage >= 10) {

                progressIndicator.innerHTML = percentage + "%";

                progressIndicator.classList.add('visible');

            } else {

                progressIndicator.classList.remove('visible');

            }

        },

      

      

    });

  

   


})();

</script>


</body>

</html>