问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js实现手机焦点图切换

发布网友 发布时间:2022-04-22 18:34

我来回答

2个回答

懂视网 时间:2022-04-22 22:56

下面小编就为大家分享一篇原生js实现简单的焦点图效果实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

用到一些封装好的运动函数,主要是定时器

效果为图片和图片的描述定时自动更换。

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title></title>
 <style type="text/css">
 ul,
 li,
 p,
 h3 {
 padding: 0;
 margin: 0;
 list-style: none;
 }
 
 img {
 border: none;
 vertical-align: top;
 }
 
 #bg_box {
 width: 1000px;
 height: 590px;
 margin: 50px auto;
 position: relative;
 background: url(img/bg1.jpg) no-repeat;
 }
 
 .pic {
 width: 440px;
 height: 274px;
 position: absolute;
 top: 50px;
 left: 220px;
 overflow: hidden;
 }
 
 .li_box {
 width: 1760px;
 height: 274px;
 position: absolute;
 left: 0;
 }
 
 .tags {
 width: 440px;
 height: 80px;
 position: absolute;
 bottom: -80px;
 background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.4) 0%, rgba(255, 255, 255, 0) 100%);
 color: white;
 padding-left: 20px;
 padding-top: 15px;
 box-sizing: border-box;
 }
 
 .tags:nth-of-type(1) {
 /*bottom: 0;*/
 }
 
 .img {
 float: left;
 width: 440px;
 height: 274px;
 }
 
 h3 {
 font: bold 20px/30px "微软雅黑";
 }
 
 p {
 font: 16px/30px "微软雅黑";
 }
 </style>
 <script src="tween.js"></script>
 <script src="commom.js"></script>
 <script type="text/javascript">
 window.onload = function() {
 //获取元素
 var liBbox = $('ul')[0];
 var li = $('li');
 var tags = $('.tags')
 var num = 0; //设置初始位置
 Change()
 function Change() {
 var M = tags[num];
 MTween(M, 'bottom', 0, 500, 'px', 'linear', function() { //先让描述内容出现
 num++
 if(num > li.length - 1) { //边界设置。
 return;
 }
 setTimeout(function() {
 MTween(M, 'bottom', -80, 500, 'px', 'linear', function() { //让描述内容不显示
 MTween(liBbox, 'left', -num * 440, 800, 'px', 'linear', function() {
 Change();
 }); //切换图片
 });
 }, 1000)
 });
 }
 }
 </script>
 </head>
 <body>
 <section id="bg_box">
 <p class="pic">
 <ul class="li_box">
 <li>
 <img class="img" src="img/a5.gif">
 </li>
 <li>
 <img class="img" src="img/a6.gif">
 </li>
 <li>
 <img class="img" src="img/a7.gif">
 </li>
 <li>
 <img class="img" src="img/a8.gif">
 </li>
 </ul>
 <p class="tags">
 <h3 class="title">下雨了~~~</h3>
 <p class="tag">这是一个适合在家睡觉的日子!!</p>
 </p>
 <p class="tags">
 <h3 class="title">包饺子~~~</h3>
 <p class="tag">一只会居家过日子的小狐狸!!</p>
 </p>
 <p class="tags">
 <h3 class="title">生气了~~~</h3>
 <p class="tag">吃掉好吃的就不生气了!!</p>
 </p>
 <p class="tags">
 <h3 class="title">出发了~~~</h3>
 <p class="tag">来一段说走就走的旅行!!</p>
 </p>
 </p>
 </section>
 </body>
</html>

commom.js

function MTween(obj,attr,end,duration,unit,way,callBack){
 if(obj.isAnim) return;
 //obj开始运动了 自定义属性
 obj.isAnim = true;
 if(!way){ //如果用户没有选择运动方式就默认匀速
 way = 'linear';
 }
 if(!unit){ //如果用户没有选择运动方式就默认匀速
 unit = '';
 }
 var start = parseFloat(getStyle(obj,attr));//起始位置
// var end = 1000;//目标点
// var duration = 1000;//动画执行的总时间 单位是毫秒
 var startTime = Date.now();
 var s = end - start; //总路程
// var v = s/duration; //计算出来的速度
 //每次20ms走一帧
 clearInterval(timer);
 var timer = 0;
 timer = setInterval(function(){
 var endTime = Date.now();
 //计算出当前时间
 var t = endTime-startTime;
 if(t>=duration){
 t = duration;
 clearInterval(timer);//到达目标点要清除定时器
 }
// obj.style[attr] = t*s/duration+start+'px';
// console.log(Tween[way](t,start,s,duration))
 obj.style[attr] = Tween[way](t,start,s,duration)+unit;
 
 //透明度的兼容处理
 if(attr=='opacity'){
 obj.style.filter = 'Alpha(opacity='+Tween[way](t,start,s,duration)*100+')';
 }
 if(t==duration){
 obj.isAnim = false;
 //等到上一个动画完成 然后再调用
 if(callBack){
 callBack();
 }
 }
 },20);
}

tween.js

/*
* t : time 已过时间 当前时间-初始时间
* b : begin 起始值
* c : count 总的运动值 总路程
* d : duration 持续时间 总时间
*
* s = vt; => c = t*c/d 这里只计算总共要运动的路程 ,不包括起始位置
*
* attrVal = t*c/d + b;
*
* 曲线方程
*
* */
//Tween.linear();
var Tween = {
 linear: function (t, b, c, d){ //匀速
 return c*t/d + b;
 },
 easeIn: function(t, b, c, d){ //加速曲线
 return c*(t/=d)*t + b;
 },
 easeOut: function(t, b, c, d){ //减速曲线
 return -c *(t/=d)*(t-2) + b;
 },
 easeBoth: function(t, b, c, d){ //加速减速曲线
 if ((t/=d/2) < 1) {
 return c/2*t*t + b;
 }
 return -c/2 * ((--t)*(t-2) - 1) + b;
 },
 easeInStrong: function(t, b, c, d){ //加加速曲线
 return c*(t/=d)*t*t*t + b;
 },
 easeOutStrong: function(t, b, c, d){ //减减速曲线
 return -c * ((t=t/d-1)*t*t*t - 1) + b;
 },
 easeBothStrong: function(t, b, c, d){ //加加速减减速曲线
 if ((t/=d/2) < 1) {
 return c/2*t*t*t*t + b;
 }
 return -c/2 * ((t-=2)*t*t*t - 2) + b;
 },
 elasticIn: function(t, b, c, d, a, p){ //正弦衰减曲线(弹动渐入)
 if (t === 0) { 
 return b; 
 }
 if ( (t /= d) == 1 ) {
 return b+c; 
 }
 if (!p) {
 p=d*0.3; 
 }
 if (!a || a < Math.abs(c)) {
 a = c; 
 var s = p/4;
 } else {
 var s = p/(2*Math.PI) * Math.asin (c/a);
 }
 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
 },
 elasticOut: function(t, b, c, d, a, p){ //*正弦增强曲线(弹动渐出)
 if (t === 0) {
 return b;
 }
 if ( (t /= d) == 1 ) {
 return b+c;
 }
 if (!p) {
 p=d*0.3;
 }
 if (!a || a < Math.abs(c)) {
 a = c;
 var s = p / 4;
 } else {
 var s = p/(2*Math.PI) * Math.asin (c/a);
 }
 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
 }, 
 elasticBoth: function(t, b, c, d, a, p){
 if (t === 0) {
 return b;
 }
 if ( (t /= d/2) == 2 ) {
 return b+c;
 }
 if (!p) {
 p = d*(0.3*1.5);
 }
 if ( !a || a < Math.abs(c) ) {
 a = c; 
 var s = p/4;
 }
 else {
 var s = p/(2*Math.PI) * Math.asin (c/a);
 }
 if (t < 1) {
 return - 0.5*(a*Math.pow(2,10*(t-=1)) * 
 Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
 }
 return a*Math.pow(2,-10*(t-=1)) * 
 Math.sin( (t*d-s)*(2*Math.PI)/p )*0.5 + c + b;
 },
 backIn: function(t, b, c, d, s){ //回退加速(回退渐入)
 if (typeof s == 'undefined') {
 s = 1.70158;
 }
 return c*(t/=d)*t*((s+1)*t - s) + b;
 },
 backOut: function(t, b, c, d, s){
 if (typeof s == 'undefined') {
 s = 3.70158; //回缩的距离
 }
 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
 }, 
 backBoth: function(t, b, c, d, s){
 if (typeof s == 'undefined') {
 s = 1.70158; 
 }
 if ((t /= d/2 ) < 1) {
 return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
 }
 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
 },
 bounceIn: function(t, b, c, d){ //弹球减振(弹球渐出)
 return c - Tween['bounceOut'](d-t, 0, c, d) + b;
 }, 
 bounceOut: function(t, b, c, d){//*
 if ((t/=d) < (1/2.75)) {
 return c*(7.5625*t*t) + b;
 } else if (t < (2/2.75)) {
 return c*(7.5625*(t-=(1.5/2.75))*t + 0.75) + b;
 } else if (t < (2.5/2.75)) {
 return c*(7.5625*(t-=(2.25/2.75))*t + 0.9375) + b;
 }
 return c*(7.5625*(t-=(2.625/2.75))*t + 0.984375) + b;
 }, 
 bounceBoth: function(t, b, c, d){
 if (t < d/2) {
 return Tween['bounceIn'](t*2, 0, c, d) * 0.5 + b;
 }
 return Tween['bounceOut'](t*2-d, 0, c, d) * 0.5 + c*0.5 + b;
 }
}

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

详细介绍ES6中的代理模式(Proxy)

构建webpack的详细介绍

使用webpack如何实现文件打包

利用webpack搭建vue脚手架

使用Vue组件如何实现日历(详细教程)

热心网友 时间:2022-04-22 20:04

pc端和移动端浏览器都支持javascript的,可直接使用。

由于移动端屏幕尺寸较小,请注意调整对应css样式。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 电脑硬件有噪音 如何分辨电脑噪音来自于哪个硬件? 私有云公有云混合云社区云的英文缩写 电脑机箱中的某个硬件有杂音,且经常重启 红米note5手机现在可以卖多少钱? 电脑硬件温度高才会有噪音吗 硬盘有噪音 什么硬件有噪音 如何申请不用手机号注册 怎么用qq号申请,而不是用手机号申请 银行贷款没还上被起诉了会有什么后果 qq号怎么申请不用手机号 怎样用qq号申请不用手机号 为什么有些股票换手率很高,但股价却涨不上去。求解600321国栋建设 如何用qq号申请不用手机号 600199 600321 今天收盘价 600321可以追么??? 股票600321停牌多长时间,什么时间复牌 银行贷款被起诉了以后有什么后果 北京办公室空气治理公司有推荐的吗? 现在电脑店里400w的电源一般多少钱? 有委托货代进口清关,需要提供哪些资料? 当个人委托进出口公司进口货物,报关单上收货单位怎么填? 有谁能告诉我进口货物报关需要哪些单据? 委托方购进一批进口货物,如果委托方把货款汇给代理方,代理方缴纳了关税和进口*,并抵扣了*, 委托代理报关和委托代理进口的区别 我公司进口货物,委托一家付汇后想委托另一家负责其它手续,而报关时需要以第一家的名义用于核销,可以吗? 委托外贸公司进口货物进项发票问题 抖音商城卖货我没有收益吗 光大中小盘基金赎回后几天到账 光大中小盘和诺安中小盘选哪个呢,请给出选择依据 华商盛世、华商阿尔法、光大中小盘三选二哪两个基金好 光大中小盘和海富通中小盘股票哪个好 - 信息提示 请教对基金熟悉的朋友,华夏优势,华夏红利混合,光大保德信中小盘股票。这样的基金搭配合理吗? 网上申购光大中小盘 费 是多少 光大是大盘股吗 东北芒种过后还能种玉米吗? 6月5日是忙种,大田玉米种植还赶趟不? 过了芒种再种玉米行吗