zoukankan      html  css  js  c++  java
  • 使用javascript编写根据用户鼠标控制背景图片的移动

         在一家VR公司做前端。

        起初进入前端就是一种内心的直觉,创造更好的用户体验,让页面更加友好,当然最起初接手web项目还是为了完成毕业设计。

       一个网上图书商城,虽然不大,但五脏都有毕竟开刀所以避免不了很多瑕疵,项目在....待我验证下好久没去看了!https://github.com/gitxiao5/html5/tree/master/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1。

      今年三月份才开始正式的工作,工作了大半年了,前端一直都没有断过,即时有时还有其他的事情,这段时间来接手的web项目不多,但是公司的网站更新了一遍又一遍,改版了该,逐渐内容充实了起来,功能越来越得到完善,但是,但是脚本语言的使用是我一直想要去驾驭的,这期间来用的基本都是第三方库,即便都能很灵活的运用,但是不知晓底层发生了什么,所以一直就像自己,亲自写一个交互,不用什么的插件,在上周公司想添加新闻板块并且是有项目列表的,做着做着就突然想到了在别的网站看到的样子。

      大概是这样的鼠标单击哪里哪里的背景就会移动到哪里,或则下划线之类的,后来又想到了轮播什么的等大概都是这个样子......

    1.012.3.怎么做别回头。。。

    HTML代码:

    <!DOCTYPE html>
    <html lang = 'en'>
       <head>
          <meta charset = "utf-8"></meta>
    	  <title>javascrpt</title>
    	  <style>
    	     *{
    		    padding:0px;
    			margin:0px;
    		 }
    		 
    		 .news-guide{
    		
    		    216px;
    			height:30px;
    			background-image:url('./1.png');
    			background-repeat:no-repeat;
    			background-size:72px 30px;
    			
    			/*background-position-x:0px;*/
    			background-color:yellow;
    		 }
    		 .news-guide ul{
    		    padding:0px;
    			position:relative;
    			100%;
    			height:100%;
    			/*background-color:red;*/
    		 }
    		 div.news-guide li.news-li{
    		    float:left;
    			display:inline-block;
    			72px;
    			height:30px;
    			/*background-color:skyblue;*/
    		 }
    	  </style>
       </head>
       <body>
          <div class = "news-guide">
    	     <ul>
    		    <li class = "news-li"></li>
    			<li class = "news-li"></li>
    			<li class = "news-li"></li>
    		 </ul>
    	  </div>
        </body>
    </html>
    

      

    JS代码:

    	  <script type = "text/javascript">
    	     //1.获得单击区块的父元素快
    		 var newsguide = document.getElementsByClassName('news-guide');
    		 //2.获得单击区块的集合
    		 var newsli = document.getElementsByClassName('news-li');
    		 //获得单击区块的集合时,我们利用循环把各个区块添加索引值,并且进行事件的绑定
    		   for(var i = 0;i<newsli.length;i++){
    			   //给每个区块添加索引值
    			   newsli[i].index = i;
    			   //定义一个动画定时器
    			   var timer;
    			   //定义一个默认索引值,给后面用
    			   var newslie=0;
    			   //这点也关键不能在css中设置,我在试的时候没反应
    			   //这个就是背景区块
    			   newsguide[0].style.backgroundPositionX = 0+'px';
    			   //进行每个dom的事件绑定
    			   newsli[i].onclick = function(){
    			    //判断当前用户所单击的区块索引值和默认索引值进行比较,假若是用户是向前单击的
    			       if(this.index > newslie){
    				   //把用户单击的区块的索引值给默认索引值
    				      newslie = this.index;
    					  //将动画事件交给timer来管理
    					  timer = requestAnimationFrame(function fn(){
    					      //判断背景图片是否到达用户单击的位置
    					      if(parseInt(newsguide[0].style.backgroundPositionX) < newslie*72){
    						    //让背景图片在每一帧先前进5个像素
    							newsguide[0].style.backgroundPositionX = parseInt(newsguide[0].style.backgroundPositionX) + 5 + 'px';
    						    //没达到之前一直回调这个动画步骤
    							timer = requestAnimationFrame(fn);
    						  }else{
    						    //倘若到达了,那么我们就释放这个动画
    						    cancelAnimationFrame(timer);
    						  }
    					  });
    				   }else{
    				   //否则用户就是在当前位置单击后面的区块
    				      //把用户单击区块的索引值赋予默认索引变量
    				      newslie = this.index;
    					  //...
    					  timer = requestAnimationFrame(function fn(){
    					    //判断背景图片是否后退到用户单击的区块位置
    					      if(parseInt(newsguide[0].style.backgroundPositionX) > newslie*72){
    						   //...
    						    newsguide[0].style.backgroundPositionX = parseInt(newsguide[0].style.backgroundPositionX) - 5 + 'px';
    						   //...
    							timer = requestAnimationFrame(fn);
    						  }else{
    						   //...
    						    cancelAnimationFrame(timer);
    						  };
    					  });
    				   };
    				   
    			   };
    			
    			};
    		
    	  </script> 
    

      

    这个插件使用的前提是在IE9之前哦,没有做兼容处理,兼容的话可以用Settimeout()等函数进行处理,

    对于新手来说上面有两点是核心的,1.索引的赋值2.判断用户的思路

    若是大神请淡淡飘过。

    ~~~~~~》《~~~~~

  • 相关阅读:
    区分replace()和replaceAll()
    error:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
    关于设计SQL表的一些问题
    SQL语句的学习理解
    error:安装手电筒程序后在打开程序后报错:你的camera flashlight正在被其他程序占据
    Error:Execution failed for task ':app:processDebugGoogleServices'. > No matching client found for package name 'com.fortythree.sos.flashlight'
    Error:Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/adp;
    Android Studio 封装的类的继承
    Android SDK安装
    MongoDB探索之路(二)——系统设计之CRUD
  • 原文地址:https://www.cnblogs.com/bkyxiao5/p/7672968.html
Copyright © 2011-2022 走看看