javascript狂想曲(三)

前段时间看了很多php后台代码,我真心觉得php的框架还是挺不错的,上手很快,模版语言也特别好,函数写法感觉像是java和js的混合体,有public和private,但是方法名却是function,我已经把route,model和controller的联系基本弄明白了,特别要说的是blade模版,真心比jade好用呀。。。好了,言归正传今天给大家带来一点干货吧。

1 背景图片随鼠标摆动

实现这个效果,应该怎么做,我来说一下我的思路:

  • 监听鼠标移动onmousemove事件,获取每个时刻的坐标值。
  • 通过animate更改图片的位置,每次方向发生改变动画停止,开启另一个。

思路有了,我们来看下如何实现把



![](images/02.png)
![](images/03a.png)
![](images/01_BG.png)
![](images/04.png)
![](images/05.png)

我们准备了5张图片,在第五张图片上滑动式会有效果。

$(function(){
    var positionX = 0;
    var positionY = 0;

    $('.pic5').mousemove(function(e) {
        var x = e.clientX, y = e.clientY;
        if(positionX === 0 && positionY === 0){
            positionX = x;
            positionY = y;
        }
        if(x > positionX && y < positionY){
            $('.pic1').stop().animate({'left':10,'top':292},'800',"easeOutCubic");
            $('.pic2').stop().animate({'right':449,'top':114},'800',"easeOutCubic");
            $('.pic3').stop().animate({'left':375,'top':5},'800',"easeOutCubic");
            $('.pic4').stop().animate({'left':-20,'top':300},'800',"easeOutCubic");
            positionX = x;
            positionY = y;
        }else if(x > positionX && y > positionY){
            $('.pic1').stop().animate({'left':-10,'top':280},'800',"easeOutCubic");
            $('.pic2').stop().animate({'right':429,'top':104},'800',"easeOutCubic");
            $('.pic3').stop().animate({'left':375,'top':-5},'800',"easeOutCubic");
            $('.pic4').stop().animate({'left':-20,'top':278},'800',"easeOutCubic");
            positionX = x;
            positionY = y;
        }else if(x < positionX && y < positionY){
            $('.pic1').stop().animate({'left':10,'top':292},'800',"easeOutCubic");
            $('.pic2').stop().animate({'right':449,'top':114},'800',"easeOutCubic");
            $('.pic3').stop().animate({'left':385,'top':5},'800',"easeOutCubic");
            $('.pic4').stop().animate({'left':20,'top':300},'800',"easeOutCubic");
            positionX = x;
            positionY = y;
        }else if(x < positionX && y > positionY){
            $('.pic1').stop().animate({'left':-10,'top':280},'800',"easeOutCubic");
            $('.pic2').stop().animate({'right':429,'top':104},'800',"easeOutCubic");
            $('.pic3').stop().animate({'left':385,'top':-5},'800',"easeOutCubic");
            $('.pic4').stop().animate({'left':20,'top':278},'800',"easeOutCubic");
            positionX = x;
            positionY = y;
        }

    })

    $.extend($.easing,{
        easeOutBack:function(x,t,b,c,d,s){
            if (s == undefined) s = 1.70158;
            return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
        },
        easeOutCubic: function (x, t, b, c, d) {
            return c * ((t = t / d - 1) * t * t + 1) + b;
        }
    });
})

看到这段代码,我们可以看出四种不同的方位移动都会造成4张图不一样的animate效果,在这里用到stop是停止上次执行。

2 原生js的放大镜

放大镜效果得准备2张图片,一个放小图片,一个放高清的大图片,在小图片上移动时,大图片的background-position需要作出变化。

  • 鼠标放上去的时候,大图片才显示出来。
  • 小图片上需要一个遮罩,跟随鼠标移动。
  • 每次移动时,计算坐标,控制大图的background-position。
 


 

wrapper里面放的就是大图片,在css里面是通过background-position控制背景图片的位置。

var container = document.querySelector('.container')
     var mirror = document.querySelector('.mirror')
     var wrapper = document.querySelector('.wrapper')

     container.onmouseover = function(){
         mirror.style.display = 'block';

         document.onmousemove = function(e){
             var x = e.clientX - container.offsetLeft - mirror.offsetWidth/2;
             var y = e.clientY - container.offsetTop - mirror.offsetHeight/2;

             var maxLeft = container.offsetWidth - mirror.offsetWidth;
             var maxTop = container.offsetHeight - mirror.offsetHeight;

             if(x < 0){
                 x = 0
             }

             if(y < 0){
                 y = 0
             }

             if(x > maxLeft){
                 x = maxLeft
             }

             if(y > maxTop){
                 y = maxTop
             }

             var xRatio = -x/maxLeft*830
             var yRatio = -x/maxTop*430

             mirror.style.left = x + 'px'
             mirror.style.top = y + 'px'

             wrapper.style.backgroundPosition = ''+ xRatio + 'px ' + yRatio + 'px'
             
         }
     }
    container.onmouseout = function(){
         mirror.style.display = 'none'
     }

一个放大镜就是这么简单。

3 自定义右键菜单

我们在网页里面右键点击,会弹出原始的右键菜单,我们来实现一个自定义的菜单。




js代码:

window.onload=function(){
        var forRight=document.getElementById("testRight");//获取对象,现在太熟悉了
        forRight.style.display="none";
        var title=forRight.getElementsByTagName("li");

        for(var i=0;i

好了,今天就给大家带来这些,很久没写python了,之后我会写一起python爬虫的。。。

你可能感兴趣的:(javascript狂想曲(三))