模仿Parallax写一个简单的视差效果

本文介绍了一种使用Jquery Parallax插件实现视差滚动效果的方法,详细解析了通过监听鼠标移动事件调整元素位置的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

之前写项目的时候一个需求效果是两个元素需要有一个视差特效,使用的是Jquery的Parallax插件,只是为了学习一下,主要原理就是通过监听鼠标移动事件,来修改指定元素的left,top值。样例如下:
在这里插入图片描述

代码

DOM结构

// 希望哪个元素有视差效果,就设置clss类为parallax_item,设置data-deep值越大,移动的幅度越小
<div id="div1" class="parallax_item" data-deep="10"></div>
<div id="div2" class="parallax_item" data-deep="5"></div>
<script type="text/javascript" src="index.js"></script>
<script src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
 // index.js
var bigData = []
function getData() {
  var lists = getClass(".parallax_item") //元素集合
  lists.each(function (i) {
    // console.log($(this)[0].id)//获取data属性上的值
    // 先记录下每个参与视差效果元素的起始位置或属性
    bigData[i] = {}
    bigData[i].id = ''
    bigData[i].old = {}
    bigData[i].deep = ''
    bigData[i].new = {}
    //这里获取到的number类型的数据,如果是通过$(this).css('left')获取记得转化数据类型
    bigData[i].old.left = $(this).position().left 
    bigData[i].old.top = $(this).position().top
    bigData[i].deep = parseInt($(this)[0].dataset.deep)
    bigData[i].id = $(this)[0].id
  })
  return bigData
}
getData()
//绑定鼠标移动事件onmousemove,只要鼠标移动就会不断接受事件
$(document).mousemove(function (e) {
  var mouClientX = e.clientX
  var mouClientY = e.clientY
  // var bigData = getData()
  for (var i = 0, len = bigData.length; i < len; i++) {
    var deep = bigData[i].deep;
    var id = bigData[i].id
   var newtop = bigData[i].old.top +mouClientY / deep + 'px'
    var newleft = bigData[i].old.left +mouClientX / deep + 'px'
    if ($('#' + id).attr("data-deep") == deep) {
      $('#' + id).css({
        left: newleft,
        top: newtop
      })
    }
  }
})
function getClass(className) {
  return $(className);
}

遇到一些效果时,尽可能地去想自己写的话该怎么实现,先用自己能想到的方法实现,再一步一步优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值