js获取各种浏览器宽度

重视基础知识,一步一个脚印

这是网上的一篇文章,自己写出来加深下印象。

屏幕的有效宽度

这个我发现在每个桌面浏览器上,不管窗口大小都是1366x728,就是桌面分辨率再减去桌面底部的任务栏。而手机没有任务栏,因此就是手机实际的宽度,这里手机我添加了视口约束,

window.screen.availHeight
window.screen.availWidth
实战练习

学习地址 感谢分享

看到scrollTop 、scrollLeft、scrollHeight、scrollWidth的时候反复测试发现好像一直都是0,偶然发现了文字滚动效果,好像就是使用的这个,扒了下教程,大致理解了,这几个的用法。

效果就是实现文字无间隔地向上滚,鼠标经过时,停止滚动。很常见的一类效果。大致实现原理是这样的:

设置一个父盒子,里面是内容,设置你要滚动区域的高宽,基础搭好后,开始滚了,先获取父盒子id,然后设置scrollTop的值,不断加就行了,可以使用循环,人家代码是使用setInterval(函数名,间隔),意思多长时间执行一次,然后写滚动函数,scrollTop+=1,就一直滚了。

var o=document.getElementById("scrollbox");//取父盒子
o.scrollTop=0;
  t=setInterval(scrolling,50); //设置间隔
  function scrolling(){
    o.scrollTop+=1;
  }

遇到第一个问题,我滚完了怎么办,如何能循环滚动?我们的代码是让父盒子的scrollTop一直增加,如果滚完了,把scrollTop设置为0,不就又重新开始了。那解决两个问题,一:判断什么时候滚完了,二,解决回滚时的视觉突变问题。
第一个:

这里用到scrollHeight,其实它指的就是整个盒子内容的高度,那滚一轮的高度scrollTop是多少,其实是scrollHeight-height(滚动区域高度);也就是说当scrollTop>=scrollHeight-height;表示滚完一圈了。设置scrollTop=0,就可以重新滚动了,运行就发现不对劲了,会有视觉突变,不自然。那怎么办呢?

第二个:

为什么会产生视觉突变,是因为两次看到的画面不一样,为什么gif动图看着像视频,因为眼睛有视觉停留效应,如果我们回滚时的页面和回滚后的页面一样,眼睛就可以欺骗我们了。那就行了,设置回滚时的页面和scrollTop为0时候的页面一样,怎么一样?这里使用代码o.innerHTML+=o.innerHTML,把内容复制一遍,这样就可以滚完完整的一圈了。就是滚完复制前的内容完整的高度。这时设置scrollTop为0,欺骗成功。

var o=document.getElementById("scrollbox");
  o.innerHTML+=o.innerHTML;
  o.scrollTop=0;
  t=setInterval(scrolling,50);
  function scrolling(){
    o.scrollTop+=1;
    if(o.scrollTop>=o.scrollHeight/2)
    {o.scrollTop = 0; }
  }
  //clearInterval(t);取消滚动

但是我想让效果更好,滚完一行,暂停一会,鼠标经过,停止滚动。
第一个

判断每滚完一行,取消滚动,延时一定时间,开启滚动。

if(o.scrollTop%lh!=0){//每一行,那就是line-height的倍数
   o.scrollTop+=1;
   if(o.scrollTop>=o.scrollHeight/2) 
     {o.scrollTop = 0; }
 }
 else{
   clearInterval(t);//先停下来,延迟一定时间,再开始
   setTimeout(start,delay);
 }

但是这里有二个问题,那就是,最开始的时候0也是lh的倍数,还有,延时函数,scrolling(),已经设置间隔执行了,因此需要再绑定一个函数。start(),这样,代码如下

function start(){
      t=setInterval(scrolling,speed); //设置间隔,没50毫秒执行一次scrolling()函数
      o.scrollTop+=1;//考虑到初始值为0,要加1
    }
    function scrolling(){
        if(o.scrollTop%lh!=0){
          o.scrollTop+=1;
          if(o.scrollTop>=o.scrollHeight/2) 
            {o.scrollTop = 0; }
        }
        else{//当为60倍数时,停止。延时一定时间delay后,重启start(),值自动加1,重复循环
          clearInterval(t);
          setTimeout(start,delay);
        }
    }

第二个 鼠标经过暂停。js中的鼠标滑过事件

o.onmouseover=function(){p=true;}
o.onmouseout=function(){p=false;}//鼠标离开,!p为真

function start(){//加不了1,自然停止,
    t=setInterval(scrolling,speed); 
    if(!p){o.scrollTop+=1;}
}

实战代码整理


<style>
  *{margin:0;padding:0;}
  h1,p{text-align: center;}
  .scrollbox{height:120px;line-height: 60px;margin:30px auto;text-align: center;font-size:40px;overflow: hidden;}
  .scrollbox ul{list-style: none;}
</style>

<body>
    <h1>晓出静慈寺送林子方</h1>
    <p>杨万里</p>
    <div class="scrollbox" id="scrollbox1">
      <ul>
        <li>毕竟西湖六月中,风光不与四时同。</li>
        <li>接天莲叶无穷碧,映日荷花别样红。</li>
      </ul>
    </div>
</body>
<script>
window.onload=function(){
  function scrolljs(lh,speed,delay,index){//行高,速度,停留时间,父盒子id索引。
    var t,p=false;
    var o=document.getElementById("scrollbox"+index);
    o.innerHTML+=o.innerHTML;
    o.onmouseover=function(){p=true;}
    o.onmouseout=function(){p=false;}
    o.scrollTop=0;
    function start(){
      t=setInterval(scrolling,speed); //设置间隔
      if(!p){o.scrollTop+=1;}
    }
    function scrolling(){
        if(o.scrollTop%lh!=0){
          o.scrollTop+=1;
          if(o.scrollTop>=o.scrollHeight/2) 
            {o.scrollTop = 0; }
        }
        else{
          clearInterval(t);
          setTimeout(start,delay);
        }
    }
    start();//这里我看人家的是setTimeout(start,delay),想到scrolling()50秒执行一次,再转到else的setTimeout(),也一样了
  }
  scrolljs(60,30,300,1);//使用时记得父盒子命名为scrollbox+索引值即可
}
</script>

总结

本来想再添加一个参数的,就是方向参数,然后if判断,但是获取id值时一直出错,比如父盒子id是scrollbox,scrolljs();里index,传的也是这个,但是getElementById时,一直获取不到,我试了转义字符也不行,而且传递方向参数时,scrollTop也得不到。偷懒的我就没再想了,想出来了,虽然调用简单,但其实代码更复杂了,就没搞了

"\""+index+"\""
"scroll"+dir
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值