效果如图,右侧的联系一栏始终位于页面的中间位置,且随着页面的上下滚动而滚动跟随

css的话没什么好说的,看图

代码

window.onload=window.onresize=window.onscroll=function(){
        var csFloor = document.getElementById("co_ser_floor");
        var iScrollTop = document.documentElement.scrollTop || document.body.scrollTop;
        setTimeout(function() {
          clearInterval(csFloor.timer);
          var iTop = parseInt((document.documentElement.clientHeight - csFloor.offsetHeight) / 2) + iScrollTop ;
          csFloor.timer = setInterval(function() {
            var iSpeed = (iTop - csFloor.offsetTop) / 8;
            iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
            csFloor.offsetTop == iTop ? clearInterval(csFloor.timer) : (csFloor.style.top = csFloor.offsetTop + iSpeed + "px");
          },
          30)},100)
    }

1.获取目标元素

2.获取页面往下滚动时被卷去的距离,兼容性写法,document.documentElement.scrollTop || document.body.scrollTop,两者在一起时只能有一个产生作用

3.设置一个定时器,页面载入后100ms后去执行里面的内容。

4.首先需要关闭定时器, csFloor.timer的写法是给自身加了个timer属性,相当于定时器私有化了,这样写的好处是当事件发生太快时,不用争抢定时器了,尤其在多物体运动时

5.定义变量iTop表示(当前页面的显示高度-目标元素的高度)/2 + 页面滚动时滚去的高度,其实就是目标元素居中的起始top值

6.定义定时器,30ms执行一次

7.定义速度,后面除以的数值可以自定义,表示动画运行的速度

8.由于缓冲运动要取整,如果速度>0的话向上取整否则向下取整

9.如果目标元素的top值等于居中位置所在的top值则清除浮动,否则目标元素的高就等于自身在当前版面的offsetTop值+速度,这里速度可能就是负值了(向下滚动时)

javascript实现页面右侧在线客服始终跟随鼠标滚动而上下滚动且始终位于屏幕中间的更多相关文章

  1. 支持微信页面右侧悬浮QQ在线客服

    使用方法: 1.将style里的css样式复制到你的样式表中 2.将body中的代码部分拷贝到你需要的地方即可 (js.图片采用绝对路径,不建议修改) <!DOCTYPE html PUBLIC ...

  2. QQ在线客服JS代码,自适应漂浮在网页右侧

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  3. 详解升讯威在线客服系统前端 JavaScript 脚本加密技术(1)

    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户.对我来说,只要能获得用户的认可,就是我最大的动力. 这段时间有几个技术小伙伴问了我一个有意思的问题:"你的前端脚本是 ...

  4. .net core 和 WPF 开发升讯威在线客服与营销系统:背景和产品介绍

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf-m.shengxunwei.com ...

  5. .net core 和 WPF 开发升讯威在线客服与营销系统:实现对 IE8 的完全完美支持 【干货】

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...

  6. 使用 WPF+ ASP.NET MVC 开发 在线客服系统 (一)

    近段时间利用业余时间开发了一套在线客服系统,期间遇到过大大小小不少问题,好在都一一解决,最终效果也还可以,打算写一个系列的文章把开发过程详细的记录下来. 希望能够和更多的开发人员互相交流学习,也希望有 ...

  7. Html_在线客服静态网页

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. PHP如何使用免费在线客服插件

    1 你可以从以下网址下载http://www.hur.cn/Soft/2011/12448.html 2 解压并放到任意文件夹下 3 在安装之前,先在数据库中创建一个完整的数据库,因为待会儿安装完成之 ...

  9. .net core 和 WPF 开发升讯威在线客服与营销系统:系统总体架构

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...

随机推荐

  1. 深入剖析Provider Model

    Membership三步曲之进阶篇 - 深入剖析Provider Model Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provide ...

  2. C#Winform中的一个登录解说(转载的哟,比较不错)

    最近,看到网上经常会问如何进行窗口跳转,大多数的问题都是牵扯到Login窗口.其实,在Visual Studio 6以来,比较正确的做法,是判断Login窗口的返回值,然后决定是否打开主窗体,那么在C ...

  3. 【IOS开发】SimPholders的使用

    推荐一个Xocde开发工具 “SimPholders”,能够快速访问到你的模拟器文件夹,最重要的是完全免费! 官方地址

  4. [google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?

    [链表] Q:Implement an algorithm to delete a node in the middle of a single linked list, given only acc ...

  5. [转]Disabling ASLR on individual iOS applications when using iOS 6.0.1

    ASLR: Address Space Layout Randomization 查看应用是否进行了 ASLR 保护的方法:otool -hv ${File-Path} I recently enco ...

  6. generating permunation

    generating permunation——全排列(算法汇总) #include <iostream> #include <string> #include <vec ...

  7. ecexl操作

    /// <summary> /// 写入ecexl /// </summary> /// <param name="dt"></param ...

  8. HttpStack及其实现类

    HttpStack及其实现类 前两篇已经对网络请求流程已经梳理了个大概,这次我们着重看一下HttpStack和它的其实现类.我们之前在Network篇讲过它仅有一个实现类,而今天我们讲的HttpSta ...

  9. 广告基本知识-ROI分解

    任何一个在线广告系统,都面临ROI的问题,对于Invest,我们先不考虑,因为对于流量有多种方式可以买回,也无法优化(当然在RTB的时候是可以优化的).Return是主要优化的方向,Return=点击 ...

  10. LLVM小结

    随笔- 5  文章- 0  评论- 10  LLVM小结   如果说gcc是FSF的传奇,llvm就是Chris Lattner的小清新.当然啦,想具体看看这位四处游山玩水还GPA 4.0的大神和他的 ...